TL;DR:安装libwebkitgtk-3.0-0-dbg ,然后你就有必要的调试符号了。
##对于调试符号,您通常不必从源代码安装。
如您所知,要为您自己构建的软件获取调试符号,您可以使用-g 运行 GCC。
对于通过操作系统的包管理器(包括libwebkitgtk-3.0-0,这里)安装的软件,至少对于官方包,通常还有提供调试符号的包。
您实际上不需要对程序或库进行调试构建即可在gdb 中获取符号堆栈跟踪。 gdb 还支持在/usr/lib/debug 中提供“附加”调试符号的文件。
根据您问题上的标签,您使用的是 Ubuntu。 在 Ubuntu 上,可以使用两种调试符号包:-dbg 和 -dbgsym。位于/<strong><em>path</em></strong> 的程序或库在/usr/lib/debug/<strong><em>path</em></strong> 获取调试符号。
##-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 包:
- 几乎总是简单(并且可以预测)命名为
<strong><em>X</em></strong>-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 "Contributors to the Ubuntu documentation wiki"、section 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 提供的符号而不是-dbg 提供的符号,则libwebkitgtk-3.0-0 的-dbgsym 包是(根据上面的简单命名约定)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 加载特定的调试符号文件,则可以使用 -s <em>file</em> 标志。详情请参阅the GNU manual 和gdb(1)。