RPM debuginfo 包和使用 -g 等选项重建包有什么区别?

RPM debuginfo 包和使用 -g 等选项重建包有什么区别?

我想澄清一下如何使用 RPM 中的 debuginfo 包。假设我有这个包vim,但我发现崩溃了。我想调试此崩溃,但gdb我收到有关gdb无法访问行号信息的错误。在我看来,我有两个选择:

  1. 安装调试信息包
  2. vim使用CFLAGSCXXFLAGS、 和LDFLAGS-g3类似的命令重新构建并安装rpm。

我最近尝试了选项#1,但仍然收到一些关于 gdb 中缺少符号的错误,这在我对 debuginfo 包是什么以及如何使用它们做出一些假设时引发了这个问题。请您解释一下我上面列出的选项 1 和选项 2 之间的区别,或者如果我不正确,如何正确完成此操作?

答案1

我最近尝试了选项#1,但仍然收到一些关于 gdb 中缺少符号的错误,这在我对 debuginfo 包是什么以及如何使用它们做出一些假设时引发了这个问题。

崩溃可能不是在应用程序本身,而是在 glibc 或 vim 依赖的任何其他库中。这意味着您必须为所有相关库安装 debuginfo 包。

这也意味着从源代码构建 vim 很可能会导致相同的问题:某些调试符号无法解析。此外,如果您自己构建一个软件包,您的编译标志将与 Fedora 使用的不同,然后您可能会或可能不会遇到相同的崩溃。

答案2

@Artem 是正确的 - 您需要拥有所有传递依赖项的 debuginfo 。

找到所有这些可能会很痛苦。您可以使用 ABRT ( dnf install abrt) 轻松实现这一点。当出现崩溃时,ABRT 会记录下来。例如在我的系统上:

$ abrt     
071eb9c 1x /usr/libexec/mysqld 2020-06-24 00:55:09
7552a02 1x mariadb 2020-06-26 15:37:45
$ abrt backtrace 071eb9c
Problem has no backtrace
Start retracing process? [y/N] y
Upload core dump and perform remote retracing? (It may contain sensitive data). If your answer is 'No', a stack trace will be generated locally. Local retracing requires downloading potentially large amount of debuginfo data [y/N] n
Local retracing
Analyzing coredump 'coredump'
Cleaning cache...
Cache cleaning has finished
...

相关内容