我正在尝试使用MiniDumpWriteDump生成一个最小的Minidump,我可以用pdb追溯附加符号。目前,这可以使用MiniDumpWithFullMemory,但会生成一个非常大的转储文件。
使用MiniDumpNormal生成转储会生成一个小文件,并为堆栈跟踪提供偏移量,但我无法使用Visual Studio或WinDbg加载符号。 Visual Studio告诉我
二进制文件未使用调试信息构建
WinDbg告诉我:
错误:找不到符号文件。默认导出符号 对于app.exe。
我尝试了几种标志组合但不能在不使用MiniDumpWithFullMemory的情况下加载符号。生成可以解析堆栈跟踪符号的最小可能转储的标志集是什么?
可执行文件是使用调试信息(/ Zi / DEBUG)构建的,将调试器附加到正在运行的进程加载符号,将调试器附加到崩溃的进程(在WER触发时)加载符号,并使用MiniDumpWithFullMemory生成转储还会加载符号,但其他转储类型不会加载符号。
答案 0 :(得分:1)
这个问题最令人困惑的部分是除了减少的小型转储之外所有调试都正常工作。检查可执行文件揭示了这个问题:
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转储中加载符号。