Ich stieß auf eine Struktur (genannt ngx_http_variable_value_t
) in meiner GDB-Sitzung (Debugger) und ich möchte drucken, welche Felder es in der Konsole hat.
Ist das möglich?
Prisma von allem
Ich stieß auf eine Struktur (genannt ngx_http_variable_value_t
) in meiner GDB-Sitzung (Debugger) und ich möchte drucken, welche Felder es in der Konsole hat.
Ist das möglich?
Nate
Sie können den GDB-Befehl verwenden ptype
um die Definition einer Struktur oder Klasse auszudrucken.
Zusätzlich verwenden ptype /o
zum Drucken von Offsets und Größen aller Felder in einer Struktur (wie pahole).
Dies ist die richtige Antwort. zB “(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; long tm_gmtoff; const char *tm_zone; } “
– gaoithe
19. Februar 2016 um 12:30 Uhr
Was ist mit Offsets?
– Konrad Meyer
2. Juni 2016 um 23:17 Uhr
@ConradMeyer Ich verwende dies für Offsets: (gdb) p &((struct foo *)0)->member
. Wäre schön, etwas Nicht-Hacky zu haben.
– Kuppel
26. April 2017 um 11:34 Uhr
@domen Ja, das ist auch mein Hack. Auch auf der Suche nach etwas nicht-hacky und schneller zu tippen :-).
– Konrad Meyer
28. April 2017 um 15:44 Uhr
@ConradMeyer Put macro define offsetof(t, f) &((t *) 0)->f)
hinein ~/.gdbinit
. Dann können Sie verwenden (gdb) p offsetof(struct foo, member)
.
– Kuppel
25. August 2017 um 9:37 Uhr
Wenn Sie Debugging-Symbole eingebaut haben, sollten Sie nur den Wert drucken können: print variable
oder print *variable
wenn es ein Zeiger auf eine Struktur ist.
Und wenn die Variable ein generischer Zeiger ist, z. B. void*, können Sie sie in den erforderlichen Typ umwandeln. print ((MY_STRUCT *)variable)
oder um ein bestimmtes Element der Struktur zu erhalten print ((MY_STRUCT *)variable->my_structure_element
.
– Phil DD
18. Oktober 2013 um 21:49 Uhr
Ciro Santilli OurBigBook.com
set print pretty on
Diese Option gibt auch Zeilenumbrüche und Einrückungen für p *my_struct_pointer
.
Was bevorzugen Sie:
$2 = {path = {mnt = 0xffff8800070ce1a0, dentry = 0xffff880006850600},last = {{{hash = 3537271320, len = 2}, hash_len = 12127205912}, name = 0xffff88000659501c "../b.out"}
oder:
$3 = {
path = {
mnt = 0xffff8800070ce1a0,
dentry = 0xffff880006850600
},
last = {
{
{
hash = 3537271320,
len = 2
},
hash_len = 12127205912
},
name = 0xffff88000659501c "../b.out"
},
}
cs01
Zusätzlich zur Verwendung der Befehlszeilenoption können Sie auch grafische Debugger verwenden. Ich schlage vor gdbguiaber da draußen gibt es einige.
Haftungsausschluss: Ich bin der Entwickler von gdbgui
p *((struct my_struct*) variable)
Dies wird Ihnen helfen, die Details von struct in gdb zu drucken
Ich habe dies nur über grafische Frontends für gdb getan. Habe diesen Eintrag in gdb online docs gefunden. Ich hoffe es hilft. Ich glaube, dies erfordert, dass der Code mit enthaltenen Debugging-Informationen erstellt wurde.
Typ [arg]
ptype akzeptiert die gleichen Argumente wie whatis, gibt aber eine detaillierte Beschreibung des Typs aus, anstatt nur den Namen des Typs.
Gnud
Ich würde mir die mal anschauen Datenanzeige-Debugger.