6

我正在尝试分析一个小型故障转储并需要符号文件以获取有关崩溃的更多详细信息。我目前只看到:“034eff74 0086eee9 00000000 0089d58d 034eff94 app_integrator!ZNK14ACE_Data_Block4baseEv+0x6”

是否可以从 msys/mingw gcc 构建的 dll 中将调试信息提取为 windbg 可读格式?如果没有,是否有任何其他方法可以获取更详细的信息,例如以某种方式加载 MAP 文件?

dll 及其包含的所有 .o 文件都是使用 -g 标志构建的。

4

1 回答 1

6

Windbg 无法处理 -g 在 mingw 安装中生成的调试信息。但是,据称它可以处理 COFF 符号。

如果您的 DLL 的源文件足够小,您可能可以获得 COFF 调试信息来构建(-gcoff 而不是 -g)。

因此,Windbg 可以(据称)处理 COFF 符号,而 GCC 可以生成它们。所以从那里应该很容易,对吧?我试图使用 Visual Studio 2008 生成的 Win32 可执行文件来执行此操作,该可执行文件正在加载 gcc 编译的 DLL。对我来说不幸的是,使用 -gcoff 编译不起作用。Mingw 的 gcc 不会为超过 64k 行代码的项目生成 COFF 符号。我使用的 DLL 明显大于 64K 代码行。遗憾的是,我不得不承认,我放弃了,转而使用可信赖的 OutputDebugString。否则,我将能够提供更完整的说明。我不想研究让 gcc 为较大的源文件执行 COFF 符号的选项,或者编写调试扩展以将 DWARF 或 STABS 数据解析到 windbg 的内部符号表的替代选项。

顺便说一句,我解决了这个问题!

可以在 windbg.info 的此论坛帖子中找到更多建议。

于 2011-09-03T22:21:31.210 回答