1. 程式人生 > >WinDbg除錯dmp(查詢問題的異常堆疊時出現的 UnhandledExceptionFilter 呼叫堆疊跟蹤中)

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 

通過 新增 第一個引數 。 此指向 EXCEPTION_POINTERS 結構


9.第一個 DWORD 代表異常記錄。 若要獲取有關異常的型別資訊,請請在命令提示符處執行以下:.exrfirst DWORD from step 6


10.第二個 DWORD 是上下文記錄。 若要獲取上下文的資訊,請在命令提示符處執行以下:.cxrsecond DWORD from step 6


11.執行 kv 命令獲得實際的異常的呼叫堆疊


可以看到是json出現了問題,丟擲了異常,但鎖沒有釋放。