2017-04-07 60 views
1

我试图用MiniDumpWriteDump产生一个最小的内存转储在那里我可以追溯一个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也加载符号,但其他转储类型不加载符号。

+2

[“二进制没有与调试信息构建”的警告在mfc应用程序中的意义?](http://stackoverflow.com/questions/12721864/binary-was-not-built-with-debug-information- warning-meaning-in-mfc-applicatio) –

+1

这不是该问题的重复,它是用调试信息构建的,并且会在使用MiniDumpWithFullMemory转储时加载符号。 – tx34

+0

加载符号懒洋洋地也被称为defferred加载它是没有丝毫关系完全正常迷你ORR内核lloaded模块列表是流让你有一些其他的问题,请确保你建立你都调试版本,以及与调试infirmation发行版本。确保你在你的priject的命令行中看到/ zi,如果windbg说没有符号默认导出符号,那么确保生成了pdb,这意味着你的二进制文件没有符号。并且小型转储器只是将其转储为 – blabb

回答

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转储加载符号。

+0

这是一个令人惊讶的副作用的清单工具。出于好奇,当你尝试在调试器中打开转储时,你是否尝试过将exe,minidump和pdb全部放在同一个目录中?使用chkmatch查看它是否认为exe和pdb文件实际匹配可能也很有趣。 –

+0

@AdrianMcCarthy使用显式的exe时,将pdb/exe/dmp放在同一个目录下不会加载符号。Chkmatch给出:'可执行文件: TimeDateStamp:58ed3297 调试信息:2(的CodeView) 时间戳:58ed3297特性:0 MajorVer:0 MinorVer:0 尺寸:92 RVA:01333e28的FileOffset:01332a28 的CodeView签名:0 \ = A 调试信息:12(未知) 时间戳:58ed3297特性:0 MajorVer:0 MinorVer:0 尺寸:20 RVA:01333e84的FileOffset:01332a84 调试信息文件: 格式:PDB 7.00 结果:无与伦比的(原因:不兼容的调试信息格式)' – tx34