
RPM の debuginfo パッケージがどのように使用されるかについて、説明をお願いします。パッケージ がありvim
、クラッシュを発見したとします。このクラッシュをデバッグしたいのですが、 で行番号情報にアクセスできないgdb
というエラーが発生しますgdb
。私の考えでは、2 つのオプションがあります。
- debuginfoパッケージをインストールする
- 、、または同様のものを
vim
使用して rpm を再構築してインストールします。CFLAGS
CXXFLAGS
LDFLAGS
-g3
最近オプション 1 を試しましたが、gdb からシンボルが見つからないというエラーがまだいくつか発生します。そのため、debuginfo パッケージとは何か、どのように使用されるかについていくつかの仮定を立てていたところ、この質問が出ました。上記に挙げたオプション 1 と 2 の違いを説明していただけますか。また、私が間違っている場合は、これを適切に実行する方法を教えていただけますか。
答え1
最近オプション 1 を試しましたが、gdb からシンボルが見つからないというエラーがまだいくつか発生します。そのため、debuginfo パッケージとは何か、どのように使用されるかについていくつかの仮定を立てていたところ、この質問が浮かびました。
クラッシュはアプリケーション自体ではなく、たとえば glibc や vim が依存する他のライブラリで発生する可能性があります。つまり、関連するすべてのライブラリの debuginfo パッケージをインストールする必要があります。
これは、ソースから vim をビルドすると、おそらく同じ問題 (一部のデバッグ シンボルが解決されない) が発生することを意味します。また、自分でパッケージをビルドする場合、コンパイル フラグは Fedora で使用されるものと異なるため、同じクラッシュが発生する場合と発生しない場合があります。
答え2
@Artem は正しいです - すべての推移的な依存関係のデバッグ情報が必要です。
すべてを見つけるのは大変かもしれません。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
...