WinDbg除錯dmp(查詢問題的異常堆疊時出現的 UnhandledExceptionFilter 呼叫堆疊跟蹤中)
1.使用windbg開啟dump檔案,同時設定symbols。
如果之前下載過windows的symbols就直接設定symbols path: (windows和程式的pdb)
例如:C:\Symbols;E:\work\技術分享\dump分析\1115伺服器無響應dump\gsss\gssssvr
如果之前沒有下載過windows的symbos則設定
C:\Symbols; SRV*e:\mylocalsymbols*http://msdl.microsoft.com/download/symbols;E:\work\技術分享\dump分析\1115伺服器無響應dump\gsss\gssssvr
2.輸入指令 ~*kv 輸出所有的執行緒
3.找到異常的執行緒,例如下面的死鎖(發現大部分函式都在等待臨界區,死鎖可能行非常大):
4.使用命令檢視臨界區資訊: RtlEnterCriticalSection的第三個地址是045ab944(臨界區地址), !cs Address 指定要顯示的臨界區地址。 : !cs 045ab944
5.切換到0x00004d0執行緒: ~~[0x00004d0]
執行 ~56s 切換到56號執行緒
6.輸入kv,檢視執行緒堆疊
7.標識對函式呼叫的執行緒 Kernel32! UnhandledExceptionFilter 。 它類似於以下
8.在第一個引數的指定位置顯示記憶體內容 Kernel32! UnhandledExceptionFilter
9.第一個 DWORD 代表異常記錄。 若要獲取有關異常的型別資訊,請請在命令提示符處執行以下:.exrfirst DWORD from step 6
10.第二個 DWORD 是上下文記錄。 若要獲取上下文的資訊,請在命令提示符處執行以下:.cxrsecond DWORD from step 6
11.執行 kv 命令獲得實際的異常的呼叫堆疊
可以看到是json出現了問題,丟擲了異常,但鎖沒有釋放。