Как отладить мини-дамп WER-образа "ngen" - PullRequest
8 голосов
/ 05 октября 2009

Когда 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 -> Не найдено соответствующих двоичных файлов.

Ответы [ 5 ]

3 голосов
/ 14 декабря 2009

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

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

1 голос
/ 17 февраля 2011

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

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

1 голос
/ 05 декабря 2009

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

0 голосов
/ 08 декабря 2009

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

0 голосов
/ 04 декабря 2009

Поможет ли это вам:

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

...