Ich möchte die gesamte Länge eines C-Strings in GDB drucken. Standardmäßig wird es abgekürzt. Wie kann ich GDB zwingen, die gesamte Zeichenfolge zu drucken?
376
set print elements 0
set print elements
number-of-elements
Legen Sie eine Grenze für die Anzahl der Elemente eines Arrays fest, die GDB drucken soll. Wenn GDB ein großes Array druckt, wird der Druckvorgang beendet, nachdem die vom set print elements
Befehl festgelegte Anzahl von Elementen gedruckt wurde . Diese Grenze gilt auch für die Anzeige von Zeichenfolgen. Wenn GDB gestartet wird, wird diese Grenze auf 200 festgelegt. Wenn Sie die Anzahl der Elemente auf Null setzen, ist der Druck unbegrenzt .
Solange sich Ihr Programm in einem vernünftigen Zustand befindet, können Sie
call (void)puts(your_string)
es auch auf stdout drucken. Das gleiche Prinzip gilt tatsächlich für alle Funktionen, die dem Debugger zur Verfügung stehen.quelle
Es gibt eine dritte Option: den Befehl x, mit dem Sie einen anderen Grenzwert für den jeweiligen Befehl festlegen können, anstatt eine globale Einstellung zu ändern. Zum Drucken der ersten 300 Zeichen einer Zeichenfolge können Sie
x/300s your_string
. Die Ausgabe ist möglicherweise etwas schwerer zu lesen. Das Drucken einer SQL-Abfrage führt beispielsweise zu:quelle
x
!Der
printf
Befehl gibt die vollständigen Zeichenfolgen aus:quelle
set print elements nnn
Grenze zu respektieren und druckt nicht die vollständige Zeichenfolge, es sei denn, Sie tun diesset print elements 0
.Nur um es zu vervollständigen:
Sie müssen eine Länge angeben, können jedoch die Darstellung dieser Zeichenfolge ändern:
Dies kann nützlich sein, wenn Sie anhand ihrer Werte debuggen möchten
quelle
Verwenden
set elements ...
ist nicht immer der beste Weg. Es wäre nützlich, wenn es eine eindeutige gäbeset string-elements ...
.Also benutze ich diese Funktionen in meiner .gdbinit:
Vorsichtsmaßnahmen:
quelle