Как найти основную причину сбоя приложения в Windbg? - PullRequest
3 голосов
/ 21 января 2012

У меня есть приложение, которое дает сбой при определенных действиях пользователя.Например, когда я нажимаю на определенную кнопку в приложении, происходит сбой.

Итак, я прикрепил 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 dlls, ws2_32.dll, mswsock.dll и wshtcpip.dll, когда я нажимаю на эту кнопку, вероятно, потому что он используетфункции, экспортированные из этих загруженных модулей.

Существует 2 исключения первого шанса с кодом исключения: e06d7363, который является кодом исключения согласно компилятору Visual C ++.

Я не уверен, почему второй шансвозникает исключение, и что именно там происходит?

Ниже приведено представление стека вызовов в этой точке в отладчике,

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

Я снова нажал g в отладчике, чтобы позволить приложениюобработать исключение, и это вывод в отладчике,

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 Ответ

2 голосов
/ 21 января 2012

Пара комментариев

  • Поток (10b0.1e9c) получил исключение и обрабатывал исключение
  • Поток (10b0.1c94) не обработал исключение.Чтобы проанализировать это, нам нужно взглянуть на трассировку стека.Однако трассировка стека является неполной и должна была быть создана с помощью команды kv для отображения параметров в стеке.
  • Второй вывод получен из другого процесса: 114c.Так что это противоречиво.

Чтобы проанализировать это, нам нужен вывод kv, когда возбуждается исключение, а затем выводить запись об исключении.Пожалуйста, предоставьте информацию, и тогда я смогу показать, как вывести запись об исключении.

На основании опубликованных результатов выполните: ".exr 02c1e830"

...