gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:53 25 4
gpt4 key购买 nike

根据 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 的相同内容也会很有帮助,因为我有时会使用它。

最佳答案

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

关于linux - Debian/Ubuntu 的调试信息文件约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28787534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com