Debug symbol packages¶
If you want to debug a crash – whether in a project you are developing yourself or from a third-party package – or if you frequently need the debug symbols for specific libraries, it might be helpful to install them permanently on your system if you can’t use debuginfod.
This document describes how to set up the debugging symbol packages (*-dbg.deb
and *-dbgsym.ddeb
). You might need to do this when you are performing tasks like a Backtrace or using Valgrind.
Debuginfod¶
If you are on Ubuntu Jammy (22.04) or later, you don’t need to worry about installing debug symbol packages since the Ubuntu project maintains a Debuginfod server. GNU Debugger (GDB) and other debuginfo-consumer applications support Debuginfod (mostly) out of the box. For more information about it, please refer to our Debuginfod guide.
You will only need to follow the methods outlined in this section if you are on Ubuntu Focal (20.04) or earlier.
Getting -dbgsym.ddeb packages¶
If you are debugging without debuginfod, your first step will be to enable the ddebs.ubuntu.com
repository as described in this section, which will provide access to the -dbgsym
packages.
In the rare cases where the -dbgsym
package is not available, you might need to install the -dbg
package instead. The subsequent section (Manual install of debug packages) provides more information about this case.
Import the signing key¶
Import the debug symbol archive signing key from the Ubuntu server. On Ubuntu 18.04 LTS and newer, run the following command:
sudo apt install ubuntu-dbgsym-keyring
Create a ddebs.list file¶
Create an /etc/apt/sources.list.d/ddebs.list
by running the following line at a terminal:
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
You can also add these repositories in your software sources from the Ubuntu software center or from Synaptic (refer to this article, especially the section on adding other repositories). You will need to add lines like:
deb http://ddebs.ubuntu.com focal main restricted universe multiverse
Note: Make sure you replace “focal” with the Ubuntu release name you’re using.
Update package list¶
Run the following to update your package list or click the Reload button if you used the Synaptic Package Manager:
sudo apt-get update
Manual install of debug packages¶
To install the debug symbol package (*-dbgsym.ddeb
) for a specific package, you can now invoke:
sudo apt-get install PACKAGE-dbgsym
For example, to install the debug symbols for xserver-xorg-core
:
sudo apt-get install xserver-xorg-core-dbgsym
As mentioned in the section above, some packages will ship their debug symbols via *-dbg.deb
packages instead. Using glibc
as an example, you can install its debug symbols using:
sudo apt-get install libc6-dbg
This procedure will install the debug symbol package for a single package only. It is likely that the binary uses shared libraries in other packages, and their debug symbols may be needed in order to obtain a readable stack trace or perform other debugging tasks.
The debian-goodies tool¶
You can use the find-dbgsym-packages
command from the debian-goodies
package to find debug symbols for a core file, running PID or binary path.
For a binary path it only finds debug symbols for the actual binary itself, and not any dynamically linked library dependencies or other libraries loaded at runtime. For that functionality to work you need to use either a core file or a running PID (which is the preferred method).
This tool will find both -dbg
and -dbgsym
style packages. However it only finds debug symbols for APT repositories that are currently enabled and updated, so you need to ensure that you enable at least the ddebs.ubuntu.com
archive as described above. For a Launchpad PPA or the Ubuntu Cloud Archive you need to add another source line with the component changed from main
to main/debug
:
sudo apt install debian-goodies
find-dbgsym-packages [core_path|running_pid|binary_path]
“debs” versus “ddebs”¶
It used to be the case that Debian/Ubuntu maintainers needed to manually create debug symbol packages as part of the packaging process, and included them in the same repository as their binary package. These debug symbol packages had the -dbg.deb
suffix, so for example, both the apache2-bin.deb
package and the apache2-dbg.deb
package would be placed in the same repository. However, since the process is a manual one, not every maintainer did this, and the .deb
package was not always kept up-to-date.
Modern package building tools automatically create the debug symbol packages when binary packages are compiled on Ubuntu servers, so the older (manual) process is no longer used. These automatically-created debug symbol packages have the -dbgsym.ddeb
suffix. Unlike -dbg.deb
packages, -dbgsym.ddeb
packages are hosted in their own separate repository, since these packages are used relatively rarely.
You can choose to use either -dbg.deb
or -dbgsym.ddeb
packages, but for any given binary package only one debug symbol package can be used at once.