2009-01-24 13 views
8

¿Cómo puedo solicitar mostrar múltiples vars en una línea? Así que quiero conseguir una salida como:¿Usando gdb, muestra múltiples vars en una línea?

30  if(s[i] != '\0') 
5: s[i] = 101 'e' 
4: exp = 14 
3: val = 123.45 
2: sign = 1 
1: i = 6 

He estado escribiendo en s disp [i] ENTER disp exp ENTER (etc, etc) y yo sólo sé que tiene que haber una mejor manera de hacer esto en una línea de tipeo

+0

Ese es un título muy útil que tienes allí. –

+0

Es una buena pregunta pero con un título malo ... – Johan

+0

Editado el título – ChrisW

Respuesta

9

Para establecer múltiples "pantallas variables" activas sin volver a escribir cada una de display i, display s[i], etc. cada vez que reinicie GDB, utilice una "secuencia de comandos enlatados" de GDB.

Por ejemplo, agregar esto a su ~/.gdbinit:

define disp_vars 
    disp i 
    disp sign 
    disp val 
    disp exp 
    disp s[i] 
end 

Ahora puede añadir todas las pantallas a la vez escribiendo disp_vars en el símbolo del BGF.

+0

Gracias, pero la pantalla continúa mostrando vars cuando paso. ¡Tendría que ir más allá del printf para cada paso! – Rob

+0

Haga caso omiso de mi comentario anterior ya que ha cambiado la respuesta de una simple impresión a la solución. Gracias. ¡Estoy marcando tu respuesta como una solución! – Rob

4

Ruso empleado dio la solución correcta, pero para aquellos que quieran verla en un ejemplo, ver a continuación. Si no está seguro de si desea comprometerse a colocar .gdbinit en su directorio de inicio, también puede ponerlo en el directorio donde está ejecutando el programa para experimentar.

$ gcc -g atof_ex4.2.c 
$ gdb ./a.out 
(gdb) b 30 
Breakpoint 1 at 0x1907: file atof_ex4.2.c, line 30. 
(gdb) h user-defined 
List of commands: 
disp_vars -- User-defined 
(gdb) disp_vars #this will enable the user defined canned sequence (but I haven't done run yet! So I'll this actually doesn't work yet.) 
No symbol "i" in current context. 
(gdb) r 
Starting program: a.out 
Breakpoint 1, atof (s=0xbffff028 "123.45e-6") at atof_ex4.2.c:30 
30  if(s[i] != '\0') 
(gdb) s # No disp_vars output yet because I have to do it AFTER 'run' command 
32   if(s[i] == 'e' || s[i] == 'E') 
(gdb) disp_vars # Now it will work ;) 
(gdb) s 
35    sign = (s[i] == '-') ? -1 : 1; 
5: s[i] = 45 '-' 
4: exp = 14 
3: val = 123.45 
2: sign = 1 
1: i = 7 

Por supuesto 'r' es para la corrida, 's' es de paso, 'b' es para las vacaciones, etc. También he omitido algunas salida. Tenga en cuenta que tuve que ingresar el comando 'disp_vars' nuevamente después de 'ejecutar'. Gracias empleado ruso

Cuestiones relacionadas