如何获取 glibc/libstdc++ 源并将其设置为供 gdb 查找?

如何获取 glibc/libstdc++ 源并将其设置为供 gdb 查找?

我正在调试这个引发异常的程序。这使得我的调试器寻找一些源代码,例如../sysdeps/unix/sysv/linux/raise.c- 但未能找到它。

现在,我意识到我没有必要拥有这些资源,但我仍然希望它们在那里。

我正在开发 Devuan Chimaera GNU/Linux 系统。

对我来说,让这些源可用并可由 gdb 定位的最简单的方法是什么?

答案1

最简单的方法是将包源代码提取到某处:转到适当的目录,然后运行

apt source glibc

在 中gdb,使用directory命令将相应的目录添加到源路径中。

您可能还需要分离的调试符号;我不知道 Devuan 是否提供了一般的调试符号包(dbgsympackages),但我看到它的发布libc6-dbg具有相同的目的:

sudo apt install libc6-dbg

这是一个示例gdb会话:

$ gdb ls
...
(gdb) directory ~/Debian/glibc
Source directories searched: /home/steve/Debian/glibc:$cdir:$cwd
(gdb) break malloc
Breakpoint 1 at 0x46c8
(gdb) run
Starting program: /bin/ls 

Breakpoint 1, malloc (n=1441) at dl-minimal.c:50
50    if (alloc_end == 0)

答案2

除了 Stephen 所说的之外,Ubuntu 22.04 的一些进一步迹象。

要获取调试符号和源代码,需要进行一些设置,如下所示:

# Get debug symbols.
printf "deb http://ddebs.ubuntu.com %s main restricted universe multiverse\n" $(lsb_release -cs){,-updates,-security,-proposed} | \
 sudo tee -a /etc/apt/sources.list.d/ddebs.list
sudo apt install ubuntu-dbgsym-keyring
sudo apt update
sudo apt install coreutils-dbgsym

# Get source as per: https://askubuntu.com/questions/496549/error-you-must-put-some-source-uris-in-your-sources-list
# Produces directory "coreutils-8.32"
sudo cp /etc/apt/sources.list /etc/apt/sources.list~
sudo sed -Ei 's/^# deb-src /deb-src /'
/etc/apt/sources.list sudo apt-get update
apt source coreutils

然后,为了让 GDB 真正找到源代码,您可能需要cd进入下载的源代码,或者使用以下内容:

set substitute-path . glibc-2.35

如所述:https://askubuntu.com/questions/487222/how-to-install-debug-symbols-for-installed-packages/1434174#1434174

相关内容