2011-06-24 2 views
5

J'ai une question à propos de gdb ou gcc (mais pas de firefox).GDB: Question sur les chemins relatifs et absolus aux fichiers dans les backtraces

Je ne vois que les chemins absolus dans gdb lorsque je débogue firefox. Exemple:

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 

Il est inconfortable de lire de tels tracés. Si je tente de compiler et déboguer programme de test minuscule que je vois comme backtrace (avec des chemins relatifs aux fichiers):

0 main() at prog.c:5 

Comment puis-je voir que des chemins relatifs à backtraces lors du débogage firefox?

P.S. gcc 4.4.1; gdb 7.0.

Répondre

1

GDB affiche le chemin absolu ou relatif en fonction de la manière dont le programme a été compilé. Considérez:

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

Maintenant, le même, mais la compilation source via chemin absolu:

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

Et encore une fois, cette fois avec un chemin relatif qui comprend le préfixe de répertoire:

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

Ainsi, vous peut obtenir gdb pour montrer le chemin relatif si vous changez la façon dont firefox est construit. Cela peut s'avérer être une proposition très non-triviale.

+0

Merci. J'ai créé une nouvelle fonctionnalité pour GDB 7.2 (argument "nopath" pour la commande "backtrace"). Mon patch coupe le chemin complet vers le fichier dans les backtraces. Exemple: (gdb) backtrace # 0 principal (argc = 4, argv = 0xbffff884) à /media/25b7639d-9a70-42ca-aaa7-28f4d1f417fd/firefox-dev/mozilla-central/browser/app/nsBrowserApp.cpp : 204 (gdb) backtrace nopath # 0 principal (argc = 4, argv = 0xbffff884) à nsBrowserApp.cpp: 204 J'espère que quelqu'un le trouvera utile. Patch et description ici: http://sourceware.org/ml/gdb-patches/2011-06/msg00385.html –

+0

Cool! Mon patch a été approuvé. Merci à Jan Kratochvil. Mon option avec les changements de Jan est disponible dans gdb 7.6: set filename-display –

Questions connexes