2009-04-08 10 views
6

Al llegar a puntos de interrupción y entrar en funciones, gdb versión 6.8 imprime el nombre de la función seguido de los argumentos de la función.¿Cómo hacer que GDB no imprima los valores de los parámetros de función al "entrar"?

Sucede que, en el programa que estoy depurando, uno de los valores de los parámetros es un registro ENORME que se pasa por referencia. gdb imprime el nombre de la variable seguido de TODAS sus variables miembro. Literalmente toma gdb uno o dos minutos para imprimir todas las variables miembro contenidas en la clase ... lo cual es realmente molesto cuando se depura.

Estoy bastante seguro de que hay una configuración para deshabilitar este comportamiento, ¿qué es esa configuración?

Respuesta

10

encontró, por fin. Para desactivar la salida por completo:

set print frame-arguments none 

Para imprimir sólo valores escalares e ignoran las matrices & estructuras:

set print frame-arguments scalars 

a su vez la espalda a la impresión:

set print frame-arguments all 
1

Tengo una manera en que siempre he hecho esto, pero ver su pregunta me hizo sentir curiosidad por ver si hay un mecanismo mejor. No encontré nada.

Siempre puede establecer un punto de interrupción dentro de la función que está ingresando, pero ANTES de realizar el paso, use el comando 'comandos' para indicarle a gdb que no desea que imprima nada cuando llegue ese punto de quiebre Un ejemplo aclarará las cosas ...

Notarás que cuando ejecuto el programa, me detengo en el punto de interrupción en la línea 10 (la llamada a foo) e imprime mi contexto actual. Después de emitir el comando 'comandos 2' y decirle a gdb que permanezca en silencio en ese punto de interrupción, nada se imprime cuando lo golpeo. Hice la traza inversa (bt) solo para mostrar que estaba donde quería estar.

Espero que esto ayude:

> cat tmp.cpp 

#include <stdio.h> 

void foo(int a) 
{ 
     printf ("%d\n", a); 
} 

int main() 
{ 
     foo(0); 

     return 0; 
} 

> g++ -g tmp.cpp 
> gdb a.out 
GNU gdb Fedora (6.8-27.el5) 
Copyright (C) 2008 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i386-redhat-linux-gnu"... 
(gdb) break 10 
Breakpoint 1 at 0x8048491: file tmp.cpp, line 10. 
(gdb) break 5 
Breakpoint 2 at 0x804846a: file tmp.cpp, line 5. 
(gdb) run 
Starting program: /home/ronb/software/a.out 

Breakpoint 1, main() at tmp.cpp:10 
10    foo(0); 
(gdb) commands 2 
Type commands for when breakpoint 2 is hit, one per line. 
End with a line saying just "end". 
>silent 
>end 
(gdb) c 
Continuing. 
(gdb) bt 
#0 foo (a=0) at tmp.cpp:5 
#1 0x0804849d in main() at tmp.cpp:10 
(gdb) 
Cuestiones relacionadas