2012-01-21 90 views
3

我有一個應用程序在用戶採取特定操作時崩潰。例如,當我點擊應用程序中的特定按鈕時,它會崩潰。如何找到Windbg中應用程序崩潰的根本原因?

因此,我將windbg附加到這個應用程序,然後執行相同的操作,這會觸發崩潰。

當事故發生,調試器顯示的輸出如下:

0:001> g 
ModLoad: 04530000 04565000 C:\Windows\SysWOW64\ws2_32.DLL 
ModLoad: 72430000 7246c000 C:\Windows\SysWOW64\mswsock.dll 
ModLoad: 723e0000 723e5000 C:\Windows\SysWOW64\wshtcpip.dll 
(10b0.1e9c): C++ EH exception - code e06d7363 (first chance) 
(10b0.1c94): C++ EH exception - code e06d7363 (first chance) 
(10b0.1c94): C++ EH exception - code e06d7363 (!!! second chance !!!) 
eax=00000000 ebx=040ee7e0 ecx=00000003 edx=00000000 esi=005c7630 edi=00400000 
eip=770715de esp=040ee7cc ebp=040eece4 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!ZwRaiseException+0x12: 
770715de 83c404   add  esp,4 

我要分析上面的輸出找出此異常的根本原因。也許,我可以把它報告給這個應用程序的開發者呢?但爲了我的理解,我想抓住這個輸出。

我可以看到,當我單擊該按鈕時,exe可能會加載3個DLL,ws2_32.dll,mswsock.dll和wshtcpip.dll,可能是因爲它使用從這些加載的模塊導出的函數。

有兩個第一次機會異常與異常代碼:e06d7363這是根據Visual C++編譯器的異常代碼。

我不確定爲什麼會出現第二次機會異常,那麼究竟發生了什麼?

下面是調用棧的在調試器這一點上來看,

0:001> k 
ChildEBP RetAddr 
03a4e7cc 7706014d ntdll!ZwRaiseException+0x12 
03a4e7cc 00000000 ntdll!KiUserExceptionDispatcher+0x29 

我在調試器再次按下克,以允許應用程序來處理異常,這是在調試器的輸出,

0:001> g 
WARNING: Continuing a non-continuable exception 
(114c.390): Unknown exception - code 00000000 (first chance) 
(114c.390): Unknown exception - code 00000000 (!!! second chance !!!) 
eax=00000000 ebx=03a4e318 ecx=83ee0000 edx=026ce8b8 esi=007073e0 edi=00400000 
eip=770715de esp=03a4e304 ebp=03a4ece4 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!ZwRaiseException+0x12: 
770715de 83c404   add  esp,4 

因此,應用程序看起來像一個未處理的異常?


這裏是詳細信息。我已經使用kv命令在堆棧上顯示參數。希望這些信息可以幫助您排除故障。

0:001> g 
ModLoad: 040a0000 040d5000 C:\Windows\SysWOW64\ws2_32.DLL 
ModLoad: 72430000 7246c000 C:\Windows\SysWOW64\mswsock.dll 
ModLoad: 723e0000 723e5000 C:\Windows\SysWOW64\wshtcpip.dll 
(193c.1810): C++ EH exception - code e06d7363 (first chance) 
(193c.1810): C++ EH exception - code e06d7363 (!!! second chance !!!) 
eax=00000000 ebx=02c1e7e0 ecx=00000003 edx=00000000 esi=007073e0 edi=00400000 
eip=770715de esp=02c1e7cc ebp=02c1ece4 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!ZwRaiseException+0x12: 
770715de 83c404   add  esp,4 
0:001> kv 
ChildEBP RetAddr Args to Child    
02c1e7cc 7706014d 02c1e7e0 02c1e830 00000000 ntdll!ZwRaiseException+0x12 (FPO: [3,0,0]) 
02c1e7cc 00000000 02c1e7e0 02c1e830 00000000 ntdll!KiUserExceptionDispatcher+0x29  (FPO: [2,0,0]) (CONTEXT @ 0000000c) 
0:001> g 
WARNING: Continuing a non-continuable exception 
(193c.1810): Unknown exception - code 00000000 (first chance) 
(193c.1810): Unknown exception - code 00000000 (!!! second chance !!!) 
eax=00000000 ebx=02c1e318 ecx=e04b0000 edx=0096e8b8 esi=007073e0 edi=00400000 
eip=770715de esp=02c1e304 ebp=02c1ece4 iopl=0   nv up ei pl zr na pe nc 
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000246 
ntdll!ZwRaiseException+0x12: 
770715de 83c404   add  esp,4 
+1

通常的做法是使用調試診斷,ADPlus的,或其他轉儲捕獲命令/實用程序來捕捉崩潰轉儲,然後在WinDbg中分析(與分析開始-v)。 –

回答

2

一對夫婦的意見

  • 線程(10b0.1e9c)有一個例外,並處理異常
  • 線程(10b0.1c94)沒有處理異常。爲了分析這個,我們需要 看一下堆棧跟蹤。但是堆棧跟蹤不完整,應使用kv命令創建 以顯示堆棧上的參數。
  • 第二個輸出來自不同的過程:114c。所以它的不一致。

要分析這個,我們需要在引發異常時輸出kv,然後轉儲異常記錄。請提供信息,然後我可以顯示如何轉儲異常記錄。

基礎上發佈的運行結果:」 .exr 02c1e830"

相關問題