如何为已安装的软件包安装调试符号?


8

我试图通过“ Qt Creator”调试器运行程序来观察程序的工作方式。为了获得更好的定位,我希望在调用堆栈窗口中也能完全看到系统(核心)实用程序,就像我在MS Visual Studio 6.0中所使用的那样,不仅是查看它们的汇编代码。对于实用程序,“ Qt Creator”调试器仅显示其调试符号不可用。(有时,系统会为其开发人员生成错误报告;“错误报告”对话框要求仅为特定程序安装此类符号。)如何获得核心调试符号?(无需翻译整个Ubuntu版本。我使用“更新管理器”定期安装更新。我

/ sys /内核/调试/ x86
目录仅包含一个空文件。我没有在“ Ubuntu软件中心”中找到它,也没有找到我所追求的http://packages.ubuntu.com/precise/x11/中的某些软件包。)谢谢!


1
请参阅页。
saiarcot895

@ saiarcot895它有效,请用您的评论作为答案,以便我将其设为接受的评论。调试符号放在文件系统中的什么位置?谢谢!
托马什Pečený

Answers:


8

Ubuntu中的软件包将其调试符号存储在单独的存储库中。要下载这些调试符号,请运行(复制并粘贴):

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

将回购链接添加到/etc/apt/sources.list.d/ddebs.list(这样可以更轻松地删除回购)。另外,您也可以将每个deb链接复制到“软件源”中,然后从那里添加它们(注意,您可能需要替换$(lsb_release -cs)为正在运行的Ubuntu版本)。

要下载的调试符号package,您可以直接安装package-dbgsym,有时也可以安装package-dbg。请注意,PPA中的软件包没有可从回购中获得的调试符号,维护人员有责任提供包含调试符号的软件包,通常是在名为的软件包中package-dbg

调试符号已安装在中/usr/lib/debug,但会gdb自动读取调试符号(如果可用),并且您无需手动指定要查找的位置。根据软件包的Debhelper兼容性版本,调试符号可能位于以下位置的文件夹中:位于.build-id>= 9)内部或可能相对于可执行文件的安装位置(< 9)的内部版本ID的名称。例如,如果您正在寻找的调试符号的位置/usr/bin/zip,并且版本小于9,则它将位于中/usr/lib/debug/usr/bin/zip

要删除所有调试符号和存储库,请运行sudo apt-get remove \.*-dbgsym以删除所有-dbgsym软件包,并sudo rm /etc/apt/sources.list.d/ddebs.list删除调试符号存储库。


5
请注意,PPA现在确实会生成dbgsym软件包。但是您需要添加带有“ main / debug”的deb行,例如:“ deb ppa.launchpad.net/USER/PPA/ubuntu生动的main / debug”
Michael Terry

从仿生开始,ddebs回购没有用于仿生安全的发布文件
Paulo Marcel CoelhoAragão18年

5

添加到saircot859的答案。您还必须按照以下说明为存储库安装GPG密钥:https : //wiki.ubuntu.com/Debug%20Symbol%20Packages

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01 C8CAB6595FDFF622

链接的维基页面已更新。在Ubuntu 18.04 LTS和更高版本上,请使用sudo apt install ubuntu-dbgsym-keyring
user7610

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.