2010-11-27 19 views
5

Deseo imprimir la variable en una función (que se llama varias veces) para imprimir cada vez que se invoca la función.Cómo imprimir una variable en una condición particular en gdb?

¿Es posible hacer esto automáticamente a través de gdb? Algo como la impresión condicional ...

algo así ..

void func() 
{ 
    if(t == 0) 
     x = z+1; 
    else 
     x = p+2; 
} 

Quiero la variable que se desea imprimir cuando t == 0 y hacer caso omiso de lo contrario ..

+1

[Este] [1] es una buena "hoja de trucos" del GDB (tengo una copia laminada de doble cara en mi lado cada vez que estoy depurando), y [este] [2] es un buen tutorial. [1]: http://www.tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf [2]: http://www.unknownroad.com/rtfm/gdbtut/gdbuse.html – William

+1

El enlace de refcard de gdb es roto. Se puede encontrar en archive.org en http://web.archive.org/web/20100611221250/http://www.tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf –

+0

Subconjunto sin parte condicional: http: //stackoverflow.com/questions/6517423/do-specific-action-when-certain-breakpoint-hits-in-gdb –

Respuesta

3

Hacer un punto de interrupción en la línea x=z+1, use 'command [breakpoint number] para imprimir la variable y continuar.

Esto funciona porque tiene una bifurcación en el código.

Si no hay rama if-else. U también puede usar 'romper si condición' y hacer lo del comando.

+0

+1, y podría ser más fácil usar 'display' _expr_ ya que automáticamente tendrá el valor de _expr_ impreso cada vez que se alcanza el punto de interrupción. – William

6

Esto se puede hacer con una combinación de los comandos breakpoint, condition y commands.

  1. Establecer un punto de interrupción con breakpoint func
  2. Que sea condicionada por condition t == 0
  3. Hacer las variables locales de impresión de punto de ruptura con:

.

commands 
info locals 
end 

o específicas variables con:

commands 
print t 
print z 
print x 
end 
0

en realidad se puede romper en un lugar determinado en una condición.

p. Ej. break sourcefile.c: 123 if x + y -foo (z) == 4. Esto se romperá en la línea 123 de sourcefile.c si esa expresión se evalúa como verdadera. Luego puede imprimir cualquier valor que desee (o continuar hasta la próxima vez que se cumpla la condición)

Cuestiones relacionadas