Das Debuggen von C-Code kann häufig die Untersuchung des Inhalts von Datenstrukturen umfassen. Dies wird besonders schwierig, wenn es um komplexe Strukturen wie C-Vektoren geht. Um dieses Problem zu beheben, wird in diesem Artikel untersucht, wie die Elemente eines std::vector
Identifizieren Sie zunächst den Zeiger auf das interne Array, das die Vektorelemente speichert. In GCC 4.1.2 ist dieser Zeiger über den Ausdruck myVector._M_impl._M_start zugänglich.
Um den gesamten Vektor zu drucken, verwenden Sie den folgenden GDB-Befehl:
print *(myVector._M_impl._M_start)@myVector.size()
Dieser Befehl druckt den Elemente des Vektors, beginnend bei der Adresse myVector._M_impl._M_start und weiter für myVector.size()-Elemente.
Um nur die ersten N Elemente des Vektors zu drucken, ändern Sie den Befehl wie folgt:
print *(myVector._M_impl._M_start)@N
Dieser Befehl druckt die ersten N Elemente des Vektors.
Erklärung:
Diese Befehle funktionieren, weil sie die Art und Weise nutzen, wie Vektoren implementiert werden in GCC 4.1.2. Das interne Array wird im Feld _M_impl._M_start des Vektors gespeichert, und mit dem GDB-Befehl „print P@N“ können Sie N Elemente eines Arrays beginnend beim Zeiger P drucken.
Verknüpfungen:
Sie können auch eine Verknüpfung in Ihrer GDB-Initialisierungsdatei (.gdbinit) erstellen, um den Debugging-Prozess zu vereinfachen. Fügen Sie die folgende Zeile zu Ihrer .gdbinit-Datei hinzu:
define p P@N
Dadurch wird ein Alias für den Befehl „print P@N“ erstellt, sodass Sie p verwenden können, um Array-Elemente bequemer zu drucken.
Das obige ist der detaillierte Inhalt vonWie drucke ich den Inhalt eines C „std::vector' in GDB?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!