うひょひょ。gcc/gasにもオプションがあったぜよ。
これで今後は、デバッグ用バイナリ配布するときに、恥ずかしいディレクトリ名を晒さずに住むわけですな。(ピコーン)
3.9 Options for Debugging Your Program or GCC
http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
-fdebug-prefix-map=old=new
When compiling files in directory old, record debugging information describing them as in new instead.
<超訳>ディレクトリ「old」でコンパイルして、「new」でコンパイルしたような内容のデバッグ情報を記録する。
さっそく手元で試すと・・・
$ g++ -g -fdebug-prefix-map=/home/syasuda/src/sandbox/placec/=/home/syasuda/src/sandbox/placea/ -o placea main.cpp
# placecでコンパイルしつつ、placeaのパスを記録したい
$ addr2line -e placea 0x80484f4
/home/syasuda/src/sandbox/placec/main.cpp:4
# あかんやんorz...
これってもしかして、文字列置換してるだけ?
ということは・・・
$ g++ -g -fdebug-prefix-map=/home/syasuda/src/sandbox/placec/=/home/syasuda/src/sandbox/placea/ -o placea /home/syasuda/src/sandbox/placec/main.cpp
# placecでコンパイルしつつ、placeaのパスを記録したい
$ addr2line -e placea 0x80484f4
/home/syasuda/src/sandbox/placea/main.cpp:4
お~。なんともイマイチな機能。イマサンくらいですかねこりゃ。
ですが、Makefileの書き方によっては、フルパスでgccに渡している場面も散見しますから、その場合はなかなか良いのではないでしょうか。
バージョン:
$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
というわけでめずらしくまとめです。
gdbでデバッグするときにソースのパスでハマる関係のまとめ
- gdbでデバッグするときにはset substitute-pathでソースのパスをfakeできる
- コンパイル時と違うルートにあるソースツリーをソース表示に使える
- コマンドファイルにdirectoryコマンドの羅列すると今後、赤恥(gdb6.6以降なら)になる予定
- 「コンパイル時とおなじディレクトリ構成」を強制したりする間抜けルールも滅亡予定
- コマンドファイルにdirectoryコマンドの羅列すると今後、赤恥(gdb6.6以降なら)になる予定
- コンパイル時と違うルートにあるソースツリーをソース表示に使える
- gcc -gでデバッグ情報に記録されるソースのパスはフルパスがデフォルトである
- 理由はよく分からない
- バイナリに記録されているパスをbinutilsのaddr2lineで確認できる
- gcc -fdebug-prefix-map=old=newで、デバッグ情報に記録されるソースのディレクトリをfakeすることができる
- gasに--with-debug-prefix-map=がある
- 自分が作ったバイナリを人に渡して、「恥ずかしい」パス((例えば「kaihatsu」とか(笑)))が表示されて「こいつローカルで、こんなパス名使ってるんだ・・・」と思われないで済む
gdbのコマンドファイルで、directoryコマンドの羅列を見て、辟易してからもう4年ですか。
長かった。というかgdbの仕事がなかった・・・
参考リンク:
gccのML Re: Debug info path remapping
http://sourceware.org/ml/binutils/2007-07/msg00134.html
(追記)
フルパスからの解放は、コンパイルマシンとデバッグマシンが異なる場合にも効果を発揮します。

実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング
- 作者: Norman Matloff,Peter Salzman,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/06/08
- メディア: 大型本
- 購入: 8人 クリック: 136回
- この商品を含むブログ (25件) を見る
コメント