【问题标题】:Extract debugging information from a msys/mingw gcc built dll using rebase.exe?使用 rebase.exe 从 msys/mingw gcc 构建的 dll 中提取调试信息?
【发布时间】:2009-10-20 08:09:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: debugging dll windbg mingw msys


    【解决方案1】:

    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 的内部符号表的替代选项。

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

    更多建议可以在in this forum post at windbg.info找到。

    【讨论】:

    • 我很想知道它是否有效,或者如果无效,您还做了什么!
    • 在相关说明中,分析器 Very Sleepy 非常适合使用 -gstabs 创建的调试符号
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多