Как извлечь трассировку стека из минидампов?

У меня есть целая куча минидампов, которые были записаны во время выполнения приложения через MiniDumpWriteDump. Минидампы были созданы на машине с версией ОС, отличной от моей машины разработки.

Теперь я пытаюсь написать программу для извлечения трассировки стека из минидампов, используя dbghelp.dll. Я иду по MINIDUMP_MODULE_LIST и вызываю SymLoadModule64, но это не может загрузить pdbs (kernel32 и т. Д.) С общедоступного сервера символов. Если я добавлю «C: \ Windows \ System32» к пути символа, он найдет библиотеки DLL и загрузит символы, но, конечно, они не соответствуют библиотекам dll из минидампа, поэтому результаты бесполезны.

Так как же сделать Я говорю dbghelp.dll загрузить и использовать правильные pdbs?

[edit]

Я забыл указать, что SymLoadModule64 принимает только имя файла и не использует информацию о версии / контрольной сумме, поэтому очевидно, что с помощью одного лишь SymLoadModule64 dbghelp не может определить, какой pdb загружать.

информация фактически доступна в MINIDUMP_MODULE_LIST, но я не знаю, как передать ее обратно в dbghelp API.

Существует SymLoadModuleEx, который принимает дополнительные параметры, но я понятия не имею, это то, что мне нужно или что я должен передать дополнительные параметры.

[edit]

Пока не повезло, хотя я заметил, что есть также dbgeng.dll, распространяемый вместе с dbghelp.dll в отладочном SDK. MSDN выглядит достаточно хорошо документированным и говорит, что это тот же движок, что и windbg. Возможно, я смогу использовать это для извлечения трассировки стека.

Если кто-нибудь может указать мне на введение в использование dbgeng.dll для обработки минидампов, это, вероятно, тоже поможет, поскольку MSDN документирует только отдельные компоненты, но не то, как они работают вместе .

8
задан Zarat 8 August 2011 в 13:57
поделиться