Frage

Ich mag die volle Länge eines C-String in GDB drucken. Standardmäßig es wird abgekürzt, wie kann ich GDB zwingen, die gesamte Zeichenfolge zu drucken?

War es hilfreich?

Lösung

set print elements 0

Von dem GDB Handbuch :

set print elements number-of-elements
Legen Sie ein Limit, wie viele Elemente eines Arrays GDB gedruckt wird. Wenn GDB ist ein großes Array Druck, stoppt er den Druck, nachdem er die Anzahl der Elemente festgelegt durch den Befehl set print elements gedruckt wurde. Diese Grenze gilt auch für die Anzeige von Strings. Wenn GDB beginnt, wird diese Grenze auf 200 Einstellung number-of-Elemente auf Null bedeutet, dass der Druck unbegrenzt .

Andere Tipps

Solange Ihr Programm in einem gesunden Zustand, man kann es auch auf der Standardausgabe drucken call (void)puts(your_string). Gleiches Prinzip gilt für alle Funktionen zur Verfügung, um den Debugger, eigentlich.

Es gibt eine dritte Option: die x-Befehl, mit dem Sie eine andere Grenze für den spezifischen Befehl festlegen können, anstatt eine globale Einstellung zu ändern. Um die ersten 300 Zeichen einer Zeichenkette drucken Sie x/300s your_string verwenden können. Der Ausgang könnte ein bisschen schwieriger zu lesen sein. Zum Beispiel das Drucken einer SQL-Abfrage ergibt:

(gdb) x/300sb stmt.c_str()
0x9cd948:    "SELECT article.r"...
0x9cd958:    "owid FROM articl"...
..

Der printf Befehl werden die kompletten Strings drucken:

(gdb) printf "%s\n", string

Just vervollständigen es:

(gdb) p (char[10]) *($ebx)
$87 =   "asdfasdfe\n"

Sie müssen eine Länge geben, kann aber die Darstellung dieser Zeichenkette ändern:

(gdb) p/x (char[10]) *($ebx)
$90 =   {0x61,
  0x73,
  0x64,
  0x66,
  0x61,
  0x73,
  0x64,
  0x66,
  0x65,
  0xa}

Dies kann nützlich sein, wenn Sie durch ihre Werte debuggen

set elements ... Verwendung ist nicht immer der beste Weg. Es wäre sinnvoll, wenn es eine deutliche set string-elements ... waren.

So verwende ich diese Funktionen in meinem .gdbinit:

define pstr
  ptype $arg0._M_dataplus._M_p
  printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end

define pcstr
  ptype $arg0
  printf "[%d] = %s\n", strlen($arg0), $arg0
end

Caveats:

  • Die erste ist c ++ lib abhängig, wie es Mitglieder von std :: string greift, wird aber leicht angepasst.
  • Die zweite kann nur auf einem laufenden Programm verwendet werden, wie es Strlen nennt.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top