使用rebase.exe从msys/mingw gcc构建的dll中提取调试信息?

6

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

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

dll和其中所有包含的.o文件都使用-g标志进行构建。

1个回答

6
Windbg无法处理安装mingw时-g生成的调试信息。然而,它据说可以处理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的这篇论坛帖子中找到。

我很想知道它是否起作用,如果没有,你还做了什么其他的事情! - Pete
相关的是,性能分析工具Very Sleepy与使用-gstabs创建的调试符号非常兼容。 - Jannis Froese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接