
我想澄清一下如何使用 RPM 中的 debuginfo 套件。假設我有這個包vim
,但我發現了崩潰。我想調試此崩潰,但gdb
我收到有關gdb
無法存取行號資訊的錯誤。在我看來,我有兩個選擇:
- 安裝調試資訊包
vim
使用CFLAGS
、CXXFLAGS
、 和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
...