2011-06-24 21 views
5

gdbまたはgcc(firefoxは除く)に関する質問があります。GDB:バックトレースのファイルへの相対パスと絶対パスに関する質問

は、私は私がFirefoxのデバッグにgdbで唯一の絶対パスを参照してください。例:

5 0x01bb0c52 in nsAppShell::ProcessNextNativeEvent 
    (this=0xb7232ba0, mayWait=1) 
    at 
    /media/25b7639d-9a70-42ca-aaa7-28f4d1f417fd/firefox-dev/mozilla-central/widget/src/gtk2/nsAppShell.cpp:144 

このようなバックトレースを読むことは不快です。 私がコンパイルしようとすると、デバッグ小さなテストプログラム場合、私は(ファイルへの相対パスで)、そのようなバックトレースを参照してください:Firefoxのデバッグ時

0 main() at prog.c:5 

は、どのように私はバックトレースに相対パスのみを見ることができますか?

P.S. gcc 4.4.1; gdb 7.0。

答えて

1

GDBは、プログラムがコンパイルされた方法に応じて、絶対または相対パスを示すであろう。同じ今

$ cd /tmp 
$ cat t.c 
int main() { return 0; } 
$ gcc -g t.c && gdb -q -ex start -ex quit ./a.out 
Reading symbols from /tmp/a.out...done. 
Temporary breakpoint 1 at 0x4004c8: file t.c, line 1. 

Temporary breakpoint 1, main() at t.c:1 
1 int main() { return 0; } 

が、絶対パスを介してソースをコンパイルします:考えてみましょう

$ gcc -g /tmp/t.c && gdb -q -ex start -ex quit ./a.out 
Reading symbols from /tmp/a.out...done. 
Temporary breakpoint 1 at 0x4004c8: file /tmp/t.c, line 1. 

Temporary breakpoint 1, main() at /tmp/t.c:1 
1 int main() { return 0; } 

そして再び、この時間は、ディレクトリの接頭辞を含む相対パスで:だから

$ cd/
$ gcc -g tmp/t.c -o tmp/a.out && gdb -q -ex start -ex quit tmp/a.out 
Reading symbols from /tmp/a.out...done. 
Temporary breakpoint 1 at 0x4004c8: file tmp/t.c, line 1. 

Temporary breakpoint 1, main() at tmp/t.c:1 
1 int main() { return 0; } 

、あなたあなたはFirefoxが構築されている方法を変更場合、GDBは、相対パスを表示するために取得することができます。それは非常に重要ではないことを証明するかもしれません。

+0

ありがとうございます。 GDB 7.2の新機能( "backtrace"コマンドの "nopath"引数)を作成しました。私のパッチは、バックトレースでファイルへの完全なパスを削減します。例: (gdb)backtrace /media/25b7639d-9a70-42ca-aaa7-28f4d1f417fd/firefox-dev/mozilla-central/browser/app/nsBrowserApp.cppのメイン(argc = 4、argv = 0xbffff884) :204 (gdb)backtrace nopath nsBrowserApp.cppの#0メイン(argc = 4、argv = 0xbffff884): 誰かが役に立つと願っています。パッチと説明はこちら:http://sourceware.org/ml/gdb-patches/2011-06/msg00385.html –

+0

クール!私のパッチが承認されました。 Jan Kratochvilに感謝します。 Janの変更に関する私の選択はgdb 7.6で利用可能です: set filename-display –