0

私はクロスコンパイル環境で gdb を使用しており、多くの共有ライブラリを含むターゲット アーキテクチャ用の Linux ツリーを構築しています。

問題:コア ダンプを分析すると、gdb は .so ファイルとそのシンボルへのパスを見つけますが、ソース ファイルは見つけません。

ホストのセットアップ:

tree/<-- ルートを構築

tree/apps/myapp/myapp<--クラッシュするアプリ

tree/libs/mysharedlib/<-- 共有ライブラリはこのようなパスから構築され、target/ にインストールされます

tree/target/ <-- ターゲット ビルド ルート

tree/target/usr/bin/<-- クラッシュするバイナリがここに入る

tree/target/lib<-- いくつかの .so:s

tree/target/usr/lib<-- いくつかの .so:s

出力例:

...
#9 0x2b038cfc in start_thread (arg=0x32dff4d0) at pthread_create.c:302
302 pthread_create.c: No such file or directory.
in pthread_create.c
...

gdb はデフォルトでソースファイルを検索する場所をどのように認識していますか?

gdb で 'directory' コマンドを使用してソース ディレクトリを手動で指定できることはわかっていますが、それは機能しますが、すべての共有ライブラリに対してそれを行いたくありません。すべてのものが構築されたルートを設定したいと思います。gdbserver を使用してライブ デバッグを行うと、gdb はすべての共有ライブラリのソースを自動的に検出するため、コア ファイルについても同じ動作が必要です。

バイナリのデバッグ情報で指定されているのは .c ファイル名だけですか、それともパスもありますか? 相対的か絶対か?

4

0 に答える 0