根据lothar在How to generate gcc debug symbol outside the build target的回答,我可以创建一个两部分可执行文件 - 剥离的可执行文件和调试信息文件。
创建剥离的可执行文件和调试信息文件后,我正常安装可执行文件(使用make install
)。但是我不知道如何处理Debian / Ubuntu的调试信息文件。
我有两个与使用GDB或LLDB调试可执行文件有关的问题(如果需要调试):
Debian / Ubuntu上调试信息文件的名称是什么?是否有遵循惯例,以便调试器自动将它们与可执行文件相关联?
我在哪里将调试信息文件放在Debian / Ubuntu上?调试程序在调试可执行文件时找到它们的位置是什么?
以下是针对不同平台的相关问题:Debug information file conventions for Red Hat/Fedora?因为我偶尔会对OS X进行处理,因此了解OS X也会有所帮助。
答案 0 :(得分:1)
Fedora和Ubuntu都遵循Debugging Information in Separate Files中描述的约定。
Gdb首先检索可执行文件.gnu_debuglink
部分中的文件名。 .gnu_debuglink
不包含任何目录名称。然后,Gdb查找名为(如果我可以使用shell语法)$(dirname $executable)/$debuglink
,然后/usr/lib/debug/$(dirname $executable)/$debuglink
的文件,以获取调试信息。 (它实际上看起来在几个替代位置;链接到上面的文档有更多信息。)
发行版提供的可执行文件的调试信息可以在,例如,
在Ubuntu上/usr/lib/debug/usr/sbin/apache2
或在Fedora上/usr/lib/debug/usr/sbin/httpd.debug
。 (Fedora添加了.debug
扩展名,如果您愿意,可以很容易地将包含调试信息的文件放在与可执行文件相同的目录中。)
目录/usr/lib/debug
在构建时编译为gdb,但gdb用户可以使用set debug-file-directory dirpath1:dirpath2:...
命令更改它。
如果您还有兴趣为gdb提供源代码:
Gdb在编译目录中查找源代码(它从调试信息的DW_AT_comp_dir
属性中检索)或当前工作目录。用户可以使用Specifying Source Directories中描述的各种gdb命令进行调整。
Fedora的*-debuginfo
软件包包括调试信息和源代码。源代码安装在/usr/src/debug
下,/usr/lib/debug
下的文件中的调试信息包含DW_AT_comp_dir
属性和目录路径名,例如/usr/src/debug/httpd-2.4.10
。如果可执行文件是从多个编译单元构建的,则可以有多个DW_AT_comp_dir
属性。
根据我的经验,Ubuntu的*-dbg
软件包不包含源代码,但用户可以使用命令apt-get source ...
将源代码下载到当前工作目录中。调试信息的DW_AT_comp_dir
属性类似于/build/buildd/apache2-2.4.7
。