解析 windows Minidump 中的符号

Resolving symbols in windows Minidump

我正在尝试使用 MiniDumpWriteDump 生成一个最小的 Minidump,我可以在其中使用 pdb 追溯附加符号。目前这可以使用 MiniDumpWithFullMemory 但会产生非常大的转储文件。

使用 MiniDumpNormal 生成转储会生成一个小文件并提供带有偏移量的堆栈跟踪,但我无法让 Visual Studio 或 WinDbg 加载符号。 Visual studio 只是告诉我

Binary was not built with debug information

WinDbg 告诉我:

ERROR: Symbol file could not be found. Defaulted to export symbols for app.exe.

我已经尝试了几种标志组合,但不使用 MiniDumpWithFullMemory 就无法加载符号。生成可以解析堆栈跟踪符号的最小可能转储的标志集是什么?

可执行文件是使用调试信息 (/Zi /DEBUG) 构建的,将调试器附加到 运行 进程加载符号,将调试器附加到崩溃进程(在 WER 触发时)加载符号,并使用 MiniDumpWithFullMemory 生成转储也会加载符号,但其他转储类型不会加载符号。

这个问题中最令人困惑的部分是除了减少的小型转储之外,所有调试都是如何正确工作的。检查可执行文件发现了问题:

symchk app.exe /v

dumpbin /headers app.exe | grep pdb

显示exe中没有pdb信息。在检查我的构建系统时,我发现了一个额外的构建步骤,它使用以下方法嵌入清单:

MT.exe -manifest C:\app.exe.manifest -outputresource:C:\app.exe;1

导致 pdb 信息被删除的原因。

删除此构建步骤可保留调试信息并允许从 MiniDumpNormal 转储加载符号。