【问题标题】:command to detect the default debugging format检测默认调试格式的命令
【发布时间】:2011-12-28 14:02:25
【问题描述】:

我想知道是否有人知道如何读取给定平台的默认调试格式。

如果您想进一步帮助我,这里是大局。我在 gcc 将某些源文件的完整路径存储在 xubuntu 11.10 的库(gsl)中时遇到问题,但在使用 redhat 的 Rocks 集群中却没有这样做。 xubuntu 有 gcc 4.6,red hat 有 4.1; redhat 集群是 x64,xubuntu 是 x32。这些是我所知道的差异。问题是 gdb 在 ubuntu 中找到源文件,但在 redhat 中找不到;在 redhat 中,只存储源文件名(信息源),没有路径。真正奇怪的事情(IMO)是代码和makefile在两个平台上都是一样的,唯一的区别是路径(在两个平台上都是绝对的)。

所以在这一点上,我唯一的线索是,默认情况下,调试格式在两个平台上都不是 stabs。所以我想检查每个平台中的那些。但是,如果您能帮我解决整个问题,我将不胜感激。

【问题讨论】:

    标签: debugging gcc format default


    【解决方案1】:

    您可以尝试使用dwarfdump 实用程序来获取有关不同平台上二进制文件中调试信息的更多信息。

    如果调试格式在任一平台上都是 stabs,我会感到惊讶,除非您使用 -gstabs 作为 gcc 的参数明确请求它。我很确定 DWARF 长期以来一直是 linux intel gcc 的默认设置。您可以使用readelf -S <binary> 来查找 .stab 或 .stabstr 部分,看看它是否真的在使用 stabs。

    【讨论】:

    • 您好,首先感谢您的帮助。我尝试使用 -g 和 -gstabs+ 进行编译,正如您所建议的,gstabs+ 版本具有 .stab 和 .stabstr 部分。普通的 -g 在这两个平台上都没有,所以我假设两者都有DWARF。使用您建议的我不知道的工具(readelf),我注意到两个二进制文件之间唯一不同的条目是 xubuntu 版本中存在的NOTE 类型的.note.gnu.build-i。这可能是相关的吗?您对如何尝试在 redhat 的调试二进制文件中获取这些绝对路径有什么建议吗?
    • 我不是集群的管理员,所以我不能尝试 dwarfdump 因为它没有安装。管理员已经为我安装了 gdb,所以我不能在那个方向上进一步推动它......
    • 好吧,你总是可以从源代码编译 dwarfdump 和 libdwarf,它们在我之前提供的链接中有说明。关于为什么二进制文件不同,我真的没有任何很好的额外想法。但是,也许您可​​以通过使用 gdb 的“目录”命令告诉 gdb 在何处查找未记录在调试信息中的路径的安装源来回避整个问题。
    • 是的,这就是我目前正在做的事情。主要问题是 gsl 有几十个子目录。所以我必须手动提供很多。我正在考虑制作一个脚本来构建一个子目录列表并生成一个 .gdbinit 文件;问题是,鉴于我的编程和 bash 技能,这对我来说本身就是一个项目。我会从源代码尝试 dwarfdump,我认为没有任何 root 访问权限就无法工作,但试一试不会有什么坏处……再次感谢您的建议;
    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2018-08-15
    • 2021-02-25
    • 2021-01-22
    相关资源
    最近更新 更多