为了减小发布版本的大小,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. 执行如