【问题标题】:Suggestions on how to write a debug format conversion tool关于如何编写调试格式转换工具的建议
【发布时间】:2010-08-26 05:46:10
【问题描述】:

我正在寻找一种工具,旨在将一种格式的调试符号转换为与 GDB 兼容的另一种格式。这似乎是一个乏味且可能复杂的项目,所以我不确定如何解决它。

最初,我的目标是将 borland 编译器发出的 Turbo 调试符号表 (TDS) 转换为类似 stabs 或 dwarf 格式的东西(我的研究似乎更喜欢 dwarf)。但理想情况下,我希望将我的工具设计为易于扩展,以便以后也可以转换其他格式。例如codeview4 甚至是 pdb。

我创建这个的主要动机是:

  • 互操作性。如果我可以将外部调试格式转换为 gdb 可以使用的格式,那么源级调试将可以在从 gcc 以外的其他编译器编译的二进制文件上进行。这意味着任何使用 gdb 作为后端的前端调试接口都可以正常工作。
  • 不存在其他工具。我做了一个谷歌搜索类似的工具,我发现最接近的是tds2dbg。但它并不完全符合我的要求。

我现在必须处理的事情:

  • 我已经有一个debug hook API 可以理解TDS 调试格式。我可以使用它来帮助我从要转换的源格式中获取所需的信息。
  • 对于这个项目的范围,我主要感兴趣的是让它在 win32 环境下工作。我不太关心的其他平台和工具。
  • 我要转换的目标 dwarf 调试格式。这个我真的一点都不熟悉。我以前使用过像 MinGW 这样的 gcc 移植编译器,并使用 gdb 以 dwarf 格式对其进行调试。但我不知道这种格式是如何在 windows 上实现的。

最后一点是我关心的。我正在阅读 dwarf 规范文档,但我发现我很难真正理解和理解它的工作原理。那里有很多细节,但同时它没有任何关于如何在不原生使用 ELF 的平台上的目标文件和图像文件上实现 dwarf 的细节——即 Windows 使用的 PE-COFF 格式.该文档也是一个非常枯燥的阅读,长句子让人难以理解,图表和插图很少。我遇到了一个名为 libDwarf 的 API,它应该可以将大部分解析工作从解释 dwarf 中解脱出来。问题是我仍在尝试构建它,但我还不知道它会如何工作。

我还没有编写任何代码,因为我不完全了解我需要构建什么。我有一种感觉,由于它的复杂性,最大的挑战将是弄清楚如何与 dwarf 一起工作。谷歌搜索有关 dwarf 如何在 Windows 下工作的信息也没有发现任何有用的信息。例如,没有关于在 PE 可执行映像文件中包含 dwarf 所需的“胶水”代码的信息。矮人部分是如何精确布置的?每个部分是否有任何标题信息? GDB 显然不只是采用“原始”的 dwarf 调试文件并按原样使用它。那么 gdb 期望调试文件采用什么样的格式才能使用它呢?

我的问题是,我该如何开始这样的项目?更重要的是,当我不可避免地遇到问题时,我可以向哪里寻求帮助?

【问题讨论】:

  • 你有没有开始做这个?我有时也发现需要像您描述的那样的工具。
  • 不是很不幸,矮人格式缺乏可理解的规范对我来说是一个很大的非首发。幸运的是,有人分叉了 gdb 并添加了基本的 tds 支持,所以我真的不需要:gdbwtds。话虽如此,您可能会发现 pyelftools 很有帮助,尽管它似乎只支持读取和解析,但不支持符号生成。

标签: debugging dwarf


【解决方案1】:

Windows 亲和汇编程序

Affinic Assembler 是一个适用于 Windows 的 x86/x86-64 汇编器,它采用带有 DWARF 调试信息的 GAS 语法汇编源,并在目标文件中生成相应的 CodeView 格式部分,以使链接的程序在 Visual Studio 中可调试。本程序非常适合 Cygwin 和 MinGW 用户将 Linux 代码移植到 Windows。

http://www.affinic.com/?page_id=48

【讨论】:

  • 以前没有听说过那个汇编器,但我一定会去看看。谢谢
  • @VictorT。你有机会试用这个调试器吗?怎么样?
【解决方案2】:

你在这里问了几个问题:-)

  1. 我认为您正在朝着正确的方向前进,使用 libdwarf。 但是,你有没有看过 objcopy 看看这个工具是否可以为你做一些工作?它可能不支持 borland、pdb 或 codeview4,但可能值得研究。 (另一种方法可能是扩展 objcopy 以支持您尝试转换的格式。)

  2. 有时当我遇到困难时,我会使用 dwarf-discuss 邮件列表。 http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org

  3. 关于 dwarf 的问题,分成单独的问题,我会尽量 回答他们。 :-)

【讨论】:

  • 感谢您的回答。我以为这个问题会被埋没在这里:P
猜你喜欢
  • 2010-10-03
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2011-01-19
相关资源
最近更新 更多