Как отлаживать минидамп WER созданного образа

Когда ngen выполняется в управляемом .NET приложении во время установки и аварийный дамп извлекается из отчетов об ошибках Windows для приложения, как вы можете использовать его для просмотра трассировки стека, переменных и т. Д.?

Вот некоторая предыстория, связанная с вопросом: у нас есть приложение .NET, которое создается при установке. Когда происходит сбой из-за необработанного исключения .NET, сбой записывается в отчет об ошибках Windows, и поэтому я смог загрузить файл minidump.mdmp с winqual.microsoft.com.

Я поместил minidump.mdmp в папку, содержащую файлы .dbg для сборки приложения, в котором произошел сбой, и дважды щелкнул minidump.mdmp, чтобы открыть его в новом экземпляре VS2008 SP1. Моя трассировка стека выглядит так:

kernel32.dll! RaiseException () + 0x3d байтов
mscorwks.dll! RaiseTheExceptionInternalOnly () + 0x295 байтов
mscorwks.dll! JIT_Throw () + 0x130 байтов
MyApp.ni.exe! 000007feee74c84c ()
[Фреймы ниже могут быть неправильными и / или отсутствовать, символы для MyApp.ni.exe не загружены]
0000000070000d5e ()
MyApp.ni.exe! 000007feee611000 ()
000000000300bf78 ()
000000000300bf60 ()

В окне «Модули» указано, что символы загружены для ОС и DLL-библиотек .NET, но для модулей приложения я получаю следующее:

MyApp.exe -> В файле символов нет собственных символов.
MyApp.ni.exe -> Соответствующий двоичный файл не найден.
MyAppsLibrary.ni.dll -> Соответствующий двоичный файл не найден.


person Edward Brey    schedule 05.10.2009    source источник
comment
Может быть, глупый вопрос, вы скомпилировали свое приложение с определением DEBUG, чтобы оно создавало файлы .pdb?   -  person scope_creep    schedule 06.10.2009
comment
Этот вопрос из Stack Overflow может быть интересен. stackoverflow.com/ questions / 850617 /   -  person scope_creep    schedule 06.10.2009
comment
И это раздел "Начало работы" для устранения сбоев. microsoft.com/whdc/devtools/debugging/installx86.mspx#a microsoft.com/whdc/devtools/debugging/debugstart.mspx #a   -  person scope_creep    schedule 06.10.2009
comment
Приложение построено с использованием конфигурации Release, и DEBUG не определена; однако конфигурация выпуска настроена на вывод файлов pdb (параметр pdb-only), и у меня есть файлы pdb. Я использовал этот подход для успешной отладки собственных приложений Win32 и раньше, но это моя первая попытка создать приложение .NET ngened.   -  person Edward Brey    schedule 07.10.2009
comment
Спасибо, scope-creep, за ссылки. К сожалению, ссылка на stackoverflow касается только получения аварийного дампа. У меня есть аварийный дамп, но я не знаю, как им пользоваться. Инструменты и символы отладки немного пугают, поскольку в его список поддержки входят собственные приложения, но не упоминаются управляемые приложения. :-(   -  person Edward Brey    schedule 07.10.2009


Ответы (5)


Самый простой способ отладить эти дампы - использовать отладчики Windows (Windbg, cdb или ntsd) и загрузить расширение отладчика SOS (для получения дополнительных сведений можно выполнить поиск по SOS).

Насколько я помню, часть NGEN не должна иметь значения для SOS, если у вас есть исходный EXE и символы (поскольку это ваше приложение, я бы ожидал, что у вас есть не ngen'ed exe и символы ).

person Remi Lemarchand    schedule 14.12.2009

«Средства отладки для Windows» (в частности, WinDBG) имеют ограниченную поддержку управляемых приложений. При наличии PDB вы должны иметь возможность видеть стек вызовов, включая ссылки на исходную строку. Чтобы увидеть значения переменных, вам нужно использовать плагин SOS, что сложнее, чем просто открыть окно стека вызовов.

person Jonathan    schedule 05.12.2009

Если вы можете запросить у клиентов запуск вашего приложения снова, попросите их запустить его со следующей установленной переменной среды: COMPLUS_ZapDisable = 1 Таким образом, CLR не будет загружать собственные образы при запуске вашего приложения, и вы увидите свой обычные модули с символами в стеке.

http://referencesource.microsoft.com/faq.aspx

person Kirill Osenkov    schedule 17.02.2011

Это может вам помочь:

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

person BlueTrin    schedule 04.12.2009

Поскольку это управляемый код, вам может потребоваться установить переменную среды _NT_EXECUTABLE_IMAGE_PATH, чтобы она указывала на папки, в которых находятся ваши исполняемые файлы. В этом случае вам нужно будет найти в кэше NativeImage папку, которая указывает на ваши сборки. Отладчику нужны изображения для загрузки сборки.

person nithins    schedule 08.12.2009