2011-06-24 12 views
5

Tengo una pregunta acerca de gdb o gcc (pero no de firefox).GDB: Pregunta sobre rutas relativas y absolutas a archivos en backtraces

Veo solo rutas absolutas en gdb cuando depuro Firefox. Ejemplo:

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 

Es incómodo para la lectura de tales trazas inversas. si trato de compilar y pequeño programa de prueba de depuración veo tal traza inversa (con rutas relativas a los archivos):

0 main() at prog.c:5 

¿Cómo puedo ver sólo rutas relativas en trazas en la depuración de Firefox?

P.S. gcc 4.4.1; gdb 7.0.

Respuesta

1

GDB mostrará la ruta absoluta o relativa dependiendo de cómo se compiló el programa. Considere:

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

Ahora mismo, pero compilar fuente a través de la ruta absoluta:

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

Y de nuevo, esta vez con ruta relativa que incluye directorios del prefijo:

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

Por lo tanto, puede obtener gdb para mostrar la ruta relativa si cambia la forma en que se genera firefox. Eso puede ser una propuesta muy no trivial.

+0

Gracias. He creado una nueva función para GDB 7.2 (argumento "nopath" para el comando "backtrace"). Mi parche corta la ruta completa para archivar en trazas inversas. Ejemplo: (GDB) traza inversa # 0 principal (argc = 4, argv = 0xbffff884) en /media/25b7639d-9a70-42ca-aaa7-28f4d1f417fd/firefox-dev/mozilla-central/browser/app/nsBrowserApp.cpp : 204 (gdb) backtrace nopath # 0 main (argc = 4, argv = 0xbffff884) en nsBrowserApp.cpp: 204 Espero que alguien lo encuentre útil. Parche y descripción aquí: http://sourceware.org/ml/gdb-patches/2011-06/msg00385.html –

+0

¡Genial! Mi parche fue aprobado. Gracias a Jan Kratochvil. Mi opción con los cambios de Jan está disponible en gdb 7.6: set filename-display –

Cuestiones relacionadas