いくつかのデバッグ タスクを自動化しようとしています。場合によっては、$ra
[これは MIPS マシンです] の値とスタックの一部を 16 進アドレスとして出力します。デバッグ中に、それらをペアaddr2line
に変換するために使用します。file:line
この手順を自動化したい。
問題は、 addr2line が__FILE__
コンパイル時の値と同等のファイル名を返すことです。つまり、コンパイラに渡されるファイルの名前です。これは通常foo.c
、時々src/foo.c
です。私のプロジェクトには合計で数百のディレクトリがあるため、これだけではファイルを一意に識別できない場合があります ( 、 などがある場合があります1/foo.c
) 2/foo.c
。決定論的であったとしても、引数ごとに画面で検索を開始するのはかなり非効率的です [ハッシュ テーブルを作成して保存できると思いますが、これを単純な bash スクリプトとして保持したいと思います]。
GDB は適切なファイルを取得しているようです。デバッグ シンボルを含む実際のソース ファイルを見ると、ファイル名の直後に__FILE__
[つまり、__FILE__
issrc/foo.c
であり、実際には にある場合、ファイルに表示されるフル パスがあるように見えることも/home/me/projects/something/comp1/src/foo.c
わかり/home/me/projects/something/comp1
ます。これをプログラムで取得するにはどうすればよいですか?
ありがとう。