Comment faire pour trouver la cause du Crash de l'Application dans Windbg?

J'ai une application qui se bloque sur une des mesures spécifiques prises par l'utilisateur. Par exemple, lorsque je clique sur un bouton spécifique dans l'application, il se bloque.

Donc, j'ai attaché windbg pour cette application, puis effectué la même opération qui allait déclencher le crash.

Quand l'accident est arrivé, le débogueur affiche la sortie suivante:

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

Je veux analyser le au-dessus de la sortie de trouver la cause racine de cette exception. Peut-être, je pourrais le signaler au développeur de cette application? Mais pour ma compréhension, je voudrais saisir cette sortie.

Je peux voir que le fichier exe charge les 3 dll, ws2_32.dll, mswsock.dll et wshtcpip.dll quand je clique sur ce bouton, sans doute parce qu'il utilise des fonctions exportées à partir de ces modules chargés.

Il y a 2 exceptions de première chance avec le code d'exception: e06d7363 qui est le code d'exception selon le Compilateur Visual C++.

Je ne suis pas sûr pourquoi, la deuxième chance exception et ce qui est exactement là?

Ci-dessous est le point de vue de la pile d'appel à ce point dans le débogueur,

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

J'ai appuyé sur g nouveau dans le débogueur pour permettre à l'application de gérer l'exception, et c'est la sortie du débogueur,

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

Donc, ressemble à une exception non gérée par l'application?


Voici les détails. J'ai utilisé la commande kv afficher les paramètres sur la pile. Espérons que cette information vous aide à résoudre les problèmes.

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
Une pratique courante est d'utiliser Debug Diag, ADPlus, ou d'autres vidage de capturer des commandes et utilitaires pour capturer les vidages sur incident et ensuite analyser dans WinDbg (en commençant par analyser -v).

OriginalL'auteur Neon Flash | 2012-01-21