Debian/Ubuntu 的调试信息文件约定?

Debug information file conventions for Debian/Ubuntu?

根据 lothar 在 How to generate gcc debug symbol outside the build target 的回答,我可以创建一个由两部分组成的可执行文件 - 剥离的可执行文件和调试信息文件。

创建剥离的可执行文件和调试信息文件后,我正常安装可执行文件(make install)。但是我不确定如何处理 Debian/Ubuntu.

的调试信息文件

关于使用 GDB 或 LLDB 调试可执行文件(如果需要调试),我有两个问题:

这是一个针对不同平台的相关问题:了解 OS X 的相同问题也会有所帮助,因为我有时会使用它。

Fedora 和 Ubuntu 都遵循 Debugging Information in Separate Files 中描述的约定。

Gdb 首先检索存在于可执行文件的 .gnu_debuglink 部分中的文件名。 .gnu_debuglink 不包含任何目录名称。 Gdb 然后查找名为(如果我可以使用 shell 语法)$(dirname $executable)/$debuglink 的文件,然后查找 /usr/lib/debug/$(dirname $executable)/$debuglink,以获取调试信息。 (它实际上在几个替代位置查找;上面链接的文档有更多信息。)

发行版提供的可执行文件的调试信息可以在例如以下位置找到 /usr/lib/debug/usr/sbin/apache2 在 Ubuntu 上或 /usr/lib/debug/usr/sbin/httpd.debug 在 Fedora 上。 (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.