Heim  >  Artikel  >  Backend-Entwicklung  >  Wie drucke ich den Inhalt eines C „std::vector“ in GDB?

Wie drucke ich den Inhalt eines C „std::vector“ in GDB?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 03:55:28674Durchsuche

How to Print the Contents of a C   `std::vector` in GDB?

GDB-Debugging für C-Vektoren

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 in GDB.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn