【问题标题】:DWARF diff tool for debug info file用于调试信息文件的 DWARF 差异工具
【发布时间】:2014-06-01 22:19:28
【问题描述】:

我有一个没有调试符号的 10 MB 大的二进制文件,但带有调试符号的二进制文件有 100 MB 大。在正常的开发周期中,我通过一个非常慢的链接反复复制几个 100 MB 的二进制文件(带有调试符号)。我正在尽量减少需要发送的信息量以加快传输速度。

我研究过像 bsdiffcourgette 这样的二进制差异工具,但是考虑到二进制文件的大小和我希望能够传输它的频率,它们所花费的时间和内存对我来说是令人望而却步的。正如回复中所指出的,有一些方法可以缓解需要将调试信息发送到远程主机的问题。 gdbserver 在我的用例中不起作用,因为我们还希望应用程序能够使用符号记录回溯信息。考虑使用PC 值和addr2line,但如果在远程机器上测试的同时尝试取得进展,保留源二进制文件可能会令人困惑。此外,对于多个开发人员,访问其他开发人员计算机上的调试信息并不总是那么容易。

strip 可以从调试信息中分离出二进制文件,所以我想知道是否有工具可以比较和“区分”两个调试信息文件,因为那是我 95% 的空间吗?在迭代之间,调试信息文件中的许多原始内容是相同的(即名称和关系,这在 C++ 中非常冗长)。

使用来自 user657267 的建议,我还研究了使用 -gsplit-dwarf 分离出 .dwo 文件。这可能有效,但我担心的是,随着时间的推移,核心标头会发生变化并导致每个.dwo 文件的微小变化,所以我最终会转移所有内容,假设我的“基础”保持不变,即使大部分内容.dwo 文件的名称保持不变。这可能会以有趣的方式解决(例如.dwo 文件的存储库),但如果可能的话,我想避免它。

那么,假设我有一个来自以前编译的 DWARF 调试信息文件,有没有办法将它与来自当前编译的 DWARF 调试信息文件进行比较,并获得更小的东西来传输?

作为绝对的最后手段,我可​​以编写某种类型的查找和翻译代码。但是是否有方便的工具用于查看、修改和“取消修改” DWARF 调试信息文件?我找到了像pyelftoolsDWARF utilities 这样的工具。前者只读取 DIE,在我的情况下速度太慢,而后者不适用于 C++,我仍在研究从最新源构建它。

按照这些思路,我调查了dwz 工具announced here 正在做什么,以查看是否可以调整以从现有(但过时的)调试信息文件中借用 DIE。在这个方向上的任何提示、文档或伪代码也会有所帮助。

【问题讨论】:

  • 编译时使用-gsplit-dwarf怎么样?
  • @user657267 从这个链接gcc.gnu.org/wiki/DebugFission,我仍然不明白拥有一个单独的 dwarf 文件将如何帮助我更轻松地区分? dwarf文件的格式我还没研究过。
  • 也许我误解了这个问题,但是在单独的文件中包含调试符号意味着您可以只 diff 两者并分发补丁。
  • diff 确实只适用于文本文件——我还不知道 .dwo 文件是否对diff 友好。 split 已经可以将调试符号分离到一个单独的文件中,该文件对 diff 不友好。
  • gzip 压缩文件的效果如何?

标签: c++ linux gcc gdb g++


【解决方案1】:

在正常的开发周期中,我必须一遍又一遍地通过一个非常慢的链接复制我的几个 100 MB 二进制文件(带有调试符号)。

必须?

您使用远程调试的用例尖叫,其中所有调试信息都保留在开发系统上,而您只有必须将剥离的二进制文件传输到目标。

关于使用gdbserver 的信息是here

如果由于某种原因您不能使用gdbserver ...

从这个链接 gcc.gnu.org/wiki/DebugFission,我仍然不明白拥有一个单独的 dwarf 文件将如何帮助我更轻松地进行 diff?

使用单独的调试信息,在通常的编译/调试周期中,您将只重新编译几个文件,并重新链接最终的二进制文件。

这意味着大部分.o.dwo 文件将不会被重建,这意味着您不必将未更改的.dwo 文件重新发送到目标,即您得到增量“免费”调试信息更新。

更新:

我们还使用调试符号为正在运行的应用程序中的异常生成回溯。我认为在本地使用符号是该用例的唯一选择。

仅当您坚持使用文件/行信息完全符号化回溯时。

处理此问题的通常方法是让回溯只包含PC 值(可能还有函数名称),并在开发系统上使用addr2line 来恢复文件/行信息必要时。

【讨论】:

  • 我们还使用调试符号为正在运行的应用程序中的异常生成回溯。我认为在本地使用符号是该用例的唯一选择。至于.dwo 文件,我没有意识到其中有很多,在这种情况下我可以理解它的好处。我仍然觉得应该有一个工具将符号编码为整数并复制映射或其他东西..
猜你喜欢
  • 2015-09-15
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多