TL;DR:安装libwebkitgtk-3.0-0-dbg,然后你就有了必要的调试符号。
##对于调试符号,您通常不必从源代码安装。
如您所知,要为您自己构建的软件获取调试符号,您可以使用-g
.
对于通过操作系统的包管理器安装的软件(包括libwebkitgtk-3.0-0
, 这里),至少对于官方包,通常还有提供调试符号的包。
您实际上不需要对程序或库进行调试构建即可在gdb
. gdb
还支持在/usr/lib/debug
.
根据您问题上的标签,您使用 Ubuntu。在 Ubuntu 上,调试符号包有两种可用:-dbg
和-dbgsym
. 位于 的程序或库在获取调试符号。/path
/usr/lib/debug/path
##-dbg
包
这些包的命名通常与提供实际可执行文件或库文件的相应包不同。它们的命名通常类似于-dev
包(提供头文件)和-doc
包。一个-dbg
包的名称中的库版本编号有时比实际的库包少,有时涵盖多个其他包中提供的二进制文件。
例如,libgtkmm-3.0-1
的对应-dbg
包是libgtkmm-3.0-dbg
。
另一方面,有时-dbg
包的名称与它提供符号的包相同(-dbg
后缀除外)。例如,libwebkitgtk-3.0-0
的对应-dbg
包是libwebkitgtk-3.0-0-dbg
。 那就是你想要的那个。
您可以在软件中心安装它或通过运行:
sudo apt-get update && sudo apt-get install libwebkitgtk-3.0-0-dbg
现在,当您调试链接到由 提供的库的程序时libwebkitgtk-3.0-0
,gdb
将自动从 提供的文件中加载符号libwebkitgtk-3.0-0-dbg
。
##-dbgsym
包
有时官方包提供的二进制可执行文件没有任何-dbg
包中提供的符号。发生这种情况时,通常您可以安装该-dbgsym
软件包。
与-dbg
包不同,-dbgsym
包:
- 几乎总是简单地(并且可以预见地)命名提供程序或库本身的包
X-dbgsym
在哪里。X
- 由特殊的软件源(存储库)提供,与提供相应程序/库包和
-dbg
包的软件源不同。
由于-dbgsym
包位于单独的存储库中,因此您必须启用这些存储库。他们的 DEB 线路是:
deb http://ddebs.ubuntu.com YOUR_RELEASE main restricted universe multiverse
deb http://ddebs.ubuntu.com YOUR_RELEASE-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com YOUR_RELEASE-security main restricted universe multiverse
deb http://ddebs.ubuntu.com YOUR_RELEASE-proposed main restricted universe multiverse
要启用它们,您可以运行以下命令(改编自DebuggingProgramCrash的“Ubuntu 文档 wiki 贡献者”,第 2 节):
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)-security 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
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01
sudo apt-get update
如果您使用的是开发版本(alpha 或 beta),请忽略斜体行。但是,如果您在稳定后继续使用该版本,请确保添加它们。
这些命令做了三件事:
- 创建文件
/etc/apt/sources.list.d/ddebs.list
(其中包含 DEB 行)。
- 导入这些存储库的签名密钥。
- 更新您的系统信息,了解哪些软件包和版本可用于从何处安装。
因此,如果您想使用-dbgsym
-provided 符号而不是-dbg
提供的符号,则-dbgsym
包libwebkitgtk-3.0-0
是(根据上面的简单命名约定)libwebkitgtk-3.0-0-dbgsym
。
您可以在同一系统上同时安装-dbg
和包,但如果它们为任何相同的文件提供符号,则不能。所以又互相冲突;它们不能同时安装。-dbgsym
libwebkitgtk-3.0-0-dbg
libwebkitgtk-3.0-0-dbgsym
##使用符号
在大多数类 Unix 操作系统上,调试器会自动查找已安装的符号。Ubuntu 也不例外——在 Ubuntu 中,会gdb
自动在/usr/lib/debug
. 所以你不需要做任何特别的事情。
但是,如果您确实需要告诉gdb
加载特定的调试符号文件,您将使用该标志。有关详细信息,请参阅GNU 手册和gdb(1)。-s file