2009-11-20 6 views

risposta

79

È possibile utilizzare il comando gdb "ptype" per stampare la definizione di una struct o di una classe.

+5

Questa è la risposta giusta per esempio "(gdb) ptype tm" "type = struct tm { int tm_sec;.. int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; lungo tm_gmtoff; const char * tm_zone; } " – gaoithe

+2

Cosa sugli offset? –

+1

@ConradMeyer Lo uso per gli offset: '(gdb) p & ((struct foo *) 0) -> membro'. Sarebbe bello avere qualcosa di non-hacky. – domen

49

Se si dispone di simboli di debug integrati, si dovrebbe essere in grado di stampare il valore: print variable o print *variable se si tratta di un puntatore a una struttura.

+1

Sì, stampa * variabile ... ovviamente. – prismofeverything

+2

E se la variabile è un puntatore generico, come un void *, puoi lanciarlo sul tipo necessario, 'print ((MY_STRUCT *) variabile)', o per ottenere un elemento specifico della struttura 'print ((MY_STRUCT *) variabile> my_structure_element' –

2

Ho fatto questo attraverso front end grafici per gdb. Ho trovato questa voce nei documenti online di gdb. Spero che sia d'aiuto. Credo che ciò richiederà che il codice sia stato creato con le informazioni di debug incluse.

ptype [arg] ptype accetta gli stessi argomenti di whatis, ma stampa una descrizione dettagliata del tipo, anziché solo il nome del tipo.

Debugging with GDB:Symbols

5

Oltre all'utilizzo dell'opzione della riga di comando, è possibile utilizzare anche i debugger grafici. Suggerisco gdbgui, ma ce ne sono parecchi là fuori.

screenshot

Disclaimer: io sono l'autore di gdbgui

6

set print pretty on

Questa opzione dà anche a capo e rientro per p *my_struct_pointer.

Che si preferiscono:

$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" 
    }, 
} 
Problemi correlati