为了减小发布版本的大小,Ubuntu的系统模块都是剥离了符号的,比如使用readelf --debug-dump /bin/ls观察,它没有任何DWARF格式的符号。
gebox@gebox-VirtualBox:~$ readelf --debug-dump /bin/ls
Contents of the .gnu_debuglink section:
Separate debug info file: 15ad836be3339dec0e2e6a3c637e08e48aacbd.debug
CRC value: 0x371907fb
(上面的build-id是用来定位与剥离出去的符号文件匹配使用的。)
因此,要想调试ls这样的系统程序,常用的方法就是从Ubuntu的符号服务器来安装符号,以下是针对Ubuntu 20.04的典型操作步骤。
1. 增加符号仓库的位置信息,建议使用如下命令自动产生一个新的配置文件
echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse" |
sudo tee -a /etc/apt/sources.list.d/ddebs.list
2. 执行如下命令安装PGP公钥,这一步是必要的,没有这一步,下一步会失败。
sudo apt install ubuntu-dbgsym-

本文介绍了如何在Ubuntu 20.04上进行系统程序的源码级调试,包括添加符号仓库、安装符号文件、使用gdb设置断点,并详细阐述了安装源代码进行调试的步骤,便于读者体验并理解Linux调试过程。
最低0.47元/天 解锁文章
1123

被折叠的 条评论
为什么被折叠?



