8

gdb や gcc について質問があります (Firefox ではありません)。

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

このようなバックトレースを読むのは不快です。小さなテスト プログラムをコンパイルしてデバッグしようとすると、次のようなバックトレースが表示されます (ファイルへの相対パスを使用):

0  main () at prog.c:5

Firefox のデバッグ時にバックトレースで相対パスのみを表示するにはどうすればよいですか?

PS gcc 4.4.1; gdb 7.0。

4

1 に答える 1

2

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に相対パスを表示させることができます。それは非常に重要な命題であることが証明されるかもしれません。

于 2011-06-25T17:43:27.570 に答える