2011-06-24 191 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 

閱讀這種回溯令人不舒服。 如果我嘗試編譯和調試的小測試程序,我看到這樣的回溯(使用相對路徑的文件):

0 main() at prog.c:5 

如何,我可以看到在回溯只有相對路徑調試Firefox時,?

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; } 

所以,你可以得到gdb顯示相對路徑如果你改變了firefox的構建方式。這可能被證明是一個非常不平凡的主張。

+0

謝謝。 我已經爲GDB 7.2創建了新功能(「backtrace」命令的「nopath」參數)。我的補丁在後退中切割文件的完整路徑。示例: (gdb)backtrace #0 main(argc = 4,argv = 0xbffff884)at /media/25b7639d-9a70-42ca-aaa7-28f4d1f417fd/firefox-dev/mozilla-central/browser/app/nsBrowserApp.cpp :204 (gdb)backtrace nopath #0 main(argc = 4,argv = 0xbffff884)at nsBrowserApp.cpp:204 我希望有人會覺得它有用。補丁和描述在這裏:http://sourceware.org/ml/gdb-patches/2011-06/msg00385.html –

+0

酷!我的補丁被批准。感謝Jan Kratochvil。我的選擇與Jan的變化可在gdb 7.6中找到: set filename-display –