2009-11-20 13 views

Respuesta

79

Puede usar el comando gdb "ptype" para imprimir la definición de una estructura o clase.

+5

Esta es la respuesta correcta por ejemplo, "(gDB) de tipo p tm" "type = struct tm {tm_sec int;.. int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; largo tm_gmtoff; const char * tm_zone; } "Lo – gaoithe

+2

acerca de las compensaciones? –

+1

@ConradMeyer Lo uso para las compensaciones: '(gdb) p & ((struct foo *) 0) -> member'. Sería bueno tener algo no hacky. – domen

49

Si tiene símbolos de depuración incorporados, solo debe poder imprimir el valor: print variable o print *variable si es un puntero a una estructura.

+1

Sí, imprimir * variable ... por supuesto. – prismofeverything

+2

Y si la variable es un puntero genérico, como un vacío *, puede convertirlo al tipo necesario, 'print ((MY_STRUCT *) variable)', o para obtener un elemento específico de la estructura 'print ((MY_STRUCT *) variable> my_structure_element' –

2

Solo he hecho esto a través de interfaces gráficas para gdb. Encontré esta entrada en gdb docs en línea. Espero eso ayude. Creo que esto requerirá que el código se haya creado con información de depuración incluida.

ptype [arg] ptype acepta los mismos argumentos que whatis, pero imprime una descripción detallada del tipo, en lugar de simplemente el nombre del tipo.

Debugging with GDB:Symbols

5

Además de usar la opción de línea de comando, también puede usar depuradores gráficos. Sugiero gdbgui, pero hay bastantes por ahí.

screenshot

responsabilidad: Yo soy el programador de gdbgui

6

set print pretty on

Esta opción también da saltos de línea y sangría para p *my_struct_pointer.

la que se hace prefieren:

$2 = {path = {mnt = 0xffff8800070ce1a0, dentry = 0xffff880006850600},last = {{{hash = 3537271320, len = 2}, hash_len = 12127205912}, name = 0xffff88000659501c "../b.out"} 

o:

$3 = { 
    path = { 
    mnt = 0xffff8800070ce1a0, 
    dentry = 0xffff880006850600 
    }, 
    last = { 
    { 
     { 
     hash = 3537271320, 
     len = 2 
     }, 
     hash_len = 12127205912 
    }, 
    name = 0xffff88000659501c "../b.out" 
    }, 
} 
Cuestiones relacionadas