手动编译并安装 recoll 包的调试符号?

手动编译并安装 recoll 包的调试符号?

我有一些崩溃文件回忆 我想从中提取一个符号堆栈跟踪。不幸的是, 没有调试符号 适用于此包,所以我的堆栈跟踪大多没有帮助。

崩溃文件是由 apport 生成的/usr/bin/recoll,所以我想使用来自外部文件的符号 而不是使用调试符号从源代码进行编译(因为那样我就必须重现崩溃)。根据构建 ID,我预计它们将进入 /usr/lib/debug/.build-id/7e/83e15f5cfae88cef2850e4a510f4d4849ae6b9.debug

$ file /usr/bin/recoll
/usr/bin/recoll: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=7e83e15f5cfae88cef2850e4a510f4d4849ae6b9, stripped
$ gdb
(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug".

我知道我可以添加debug-file-directory这样的内容:

(gdb) set debug-file-directory /usr/lib/debug:/home/nathaniel/mysymbols

但我仍然需要编译目标文件,而且我难以找到足够的文件 关于如何使用 apt/dpkg 执行此操作。当然,我可以使用apt-get source -b recoll来下载并构建它,但构建 ID 不一样,最终的可执行文件仍然被剥离。我猜这是因为-fdebug-prefix-map不一样。

$ sudo apt-get build-dep recoll
$ apt-get source -b recoll
<snip>
./configure CFLAGS="-g -O2 -fdebug-prefix-map=/home/nathaniel/apt-get-source/recoll/recoll-1.23.7=.
<snip>
$ file recoll-1.23.7/qtgui/recoll
recoll-1.23.7/qtgui/recoll: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=be2479236c840a60c71848f9d8257b68856f28f5, not stripped
$ file recoll-1.23.7/debian/recoll/usr/bin/recoll
recoll-1.23.7/debian/recoll/usr/bin/recoll: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=be2479236c840a60c71848f9d8257b68856f28f5, stripped

所以我的问题是:

如何在 Ubuntu 18.04 上手动编译和安装 recoll 包的调试符号?

有关的:

相关内容