Дамп сбоя - устранение сбоя неуправляемого кода в приложении .NET с использованием WinDbg - PullRequest
7 голосов
/ 21 января 2011

Я пытаюсь найти инструмент WinDbg для анализа аварийного дампа, который имеется на нашем рабочем сервере.

Когда я запускаю !analyze -v, я получаю:

0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

GetPageUrlData failed, server returned HTTP status 404
URL requested: http://watson.microsoft.com/StageOne/w3wp_exe/7_0_6002_18005/49e03238/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

FAULTING_IP: 
+14935130
00000000`00000000 ??              ???

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000000000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD:  00000000000029b0

DEFAULT_BUCKET_ID:  WRONG_SYMBOLS

PROCESS_NAME:  w3wp.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

MANAGED_STACK: !dumpstack -EE
OS Thread Id: 0x29b0 (0)
Child-SP         RetAddr          Call Site

PRIMARY_PROBLEM_CLASS:  WRONG_SYMBOLS

BUGCHECK_STR:  APPLICATION_FAULT_WRONG_SYMBOLS

LAST_CONTROL_TRANSFER:  from 000000007749c0b0 to 00000000775e6d5a

STACK_TEXT:  
00000000`0012f6c8 00000000`7749c0b0 : 00000000`00000000 000007fe`faf07e6b 00000000`00000000 000007fe`f9c015f0 : ntdll!ZwWaitForSingleObject+0xa
00000000`0012f6d0 000007fe`f9c03e74 : 00000000`00000158 00000000`ffb35de0 00000000`00000000 00000000`00000158 : kernel32!WaitForSingleObjectEx+0x9c
00000000`0012f790 00000000`ffb3235a : 00000000`fffffffe 00000000`00000001 00000000`007e6400 00000000`0000008c : w3wphost!AppHostInitialize+0x280
00000000`0012f7f0 00000000`ffb33b71 : 00000000`00000000 00000000`ffb33ce5 00000000`00000000 00000000`00000000 : w3wp!wmain+0x466
00000000`0012f980 00000000`7748be3d : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : w3wp!PerfStopProvider+0x199
00000000`0012f9c0 00000000`775c6a51 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd
00000000`0012f9f0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d


STACK_COMMAND:  ~0s; .ecxr ; kb

FOLLOWUP_IP: 
w3wphost!AppHostInitialize+280
000007fe`f9c03e74 f6052998000003  test    byte ptr [w3wphost!g_dwDebugFlags (000007fe`f9c0d6a4)],3

SYMBOL_STACK_INDEX:  2

SYMBOL_NAME:  w3wphost!AppHostInitialize+280

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: w3wphost

IMAGE_NAME:  w3wphost.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  49e0420f

FAILURE_BUCKET_ID:  WRONG_SYMBOLS_80000003_w3wphost.dll!AppHostInitialize

BUCKET_ID:  X64_APPLICATION_FAULT_WRONG_SYMBOLS_w3wphost!AppHostInitialize+280

WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/w3wp_exe/7_0_6002_18005/49e03238/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner

Iдействительно трудно понять, что к чему.Из того, что я понимаю, вот интересная часть:

EXCEPTION_CODE and STACK_TEXT.

Я действительно новичок в WinDbg, и я впервые использую этот инструмент.Я боролся с поиском в Google, так что, думаю, я не ищу нужную вещь.

Я хотел бы сделать следующее:

  1. Понять выводформат стека_текст
  2. Попробуйте просмотреть входные параметры каждой функции

Это правильный способ решения этой проблемы?

Ответы [ 2 ]

10 голосов
/ 21 января 2011

В Интернете есть несколько хороших учебных пособий и даже в файле справки WinDbg (.chm). Хорошее место было бы Учебник WinDBG - Введение или Блог Тесс, Если он сломан, исправьте его, вы должны .

В вашем случае шаг 1 будет указывать WinDbg на правильные символы. Из приведенного выше вывода ясно, что ваше сочувствие либо неверно, либо не указывает ни на какие файлы PDB. Сделайте следующее в отладчике:

.sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

Это позволит отладчику использовать общедоступный сервер символов Microsoft для компонентов ОС; он будет кешировать файлы PDB в вашу папку c:\symbols. Чтобы добавить другой путь символа (например, папку, содержащую файлы PDB вашего приложения), вы можете использовать «;» разделить список путей или просто использовать команду .sympath+ для добавления новых путей по частям.

После настройки пути к символу снова запустите !analyze -v или следуйте инструкциям, приведенным в руководстве выше, чтобы увидеть, получите ли вы лучшие результаты.

5 голосов
/ 27 января 2011

Трассировка стека должна быть читаемой, если у вас есть правильные символы. Вы можете попробовать что-то вроде:

  1. Загрузить файл дампа.
  2. Выполнить .symfix
  3. Открыть меню «Путь к символьному файлу»
  4. Добавить путь к файлам .PDB вашего приложения
  5. Установите флажок «перезагрузить»
  6. Запустите !clrstack -p, чтобы выгрузить стек с параметрами.
...