Wie man ein Zeiger wie ein array in GDB?
Angenommen, definiert: int a[100]
Typ print a
dann gdb wird automatisch angezeigt, es als ein array:1, 2, 3, 4...
. Allerdings, wenn a
an eine Funktion übergeben als parameter, dann gdb zu behandeln, wird es als eine normale int-Zeiger, Typ print a
wird angezeigt:(int *)0x7fffffffdaa0
. Was soll ich tun, wenn ich Sie anzeigen möchten a
als array?
- Wandeln Sie Sie in ein array-Typ, oder verwenden Sie die
x
Befehl. - In Verbindung mit dem Assembler-code ohne Typen: stackoverflow.com/questions/32300718/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen hier. kurz Sie tun sollten:
command array
?*(T (*)[N])p
wobei T der Typ ist N die Anzahl der Elemente, und p ist der pointer.p
zu einem Zeiger auf array-Typ (anstelle von Zeiger-auf-element-Typ zeigt auf das erste element), dann dereferenziert, dass der Zeiger um ein array-Objekt. In C würde dieses Verfalls wieder zu einem Zeiger in den meisten Kontexten, außer als Operanden von&
odersizeof
, aber gdb verwendet die array-Typ direkt auf drucken, um das array.(T[N])*p
. GDB ist ein bisschen mehr können als C 😉Verwenden Sie die
x
Befehl.int
s, es wird nicht helfen, z.B. wenn das array enthältstruct
s.