Ich werde erklären, wie man gdb für diejenigen verwendet, die C-Sprache in der Linux-Umgebung debuggen. Für Anfänger.
Es ist ein Debugger. Haltepunkte setzen, durchgehen, Sie können in die Variablen schauen, sie neu schreiben und so weiter. Wie gcc wird es standardmäßig unter Linux installiert.
Es ist ein altes Tool, das über die Befehlszeile ausgeführt wird. Dies ist nützlich für das Debuggen in einer Umgebung, in der der IDE-Debugger nicht verwendet werden kann.
verdienen: ・ Kann in den meisten Linux-Umgebungen verwendet werden -Kann durch Anhängen an ein laufendes Programm debuggt werden
Fehler: -Es gibt keinen GUI-Bildschirm. Befehle müssen gespeichert werden
① Kompilieren Sie die Quelldatei auf debuggbare Weise gcc -g3 test.c → a.out wird generiert
(2) Führen Sie die generierte Objektdatei mit dem Befehl gdb aus gdb a.out → Danach werden Sie von gdb aufgefordert, einen Befehl einzugeben.
③ Legen Sie vor der Ausführung einen Haltepunkt fest b test.c: 256 # Unterbrechung in Zeile 256 von test.c b main # function main Machen Sie am Anfang eine Pause
④ Ausführung run
(1) Überprüfen Sie die Prozess-ID (PID) des Programms, das Sie debuggen möchten ps -ef | grep a.out
② anhängen gdb # Ohne Argumente ausführen 12345 anhängen (pid in ↑ bestätigt)
Danach können Sie mit gdb Haltepunkte setzen und Variablen anzeigen. Wenn Sie den Prozess ändern möchten, können Sie einen anderen Prozess trennen und dann anhängen.
Hier sind die Hauptbefehle. Alle sind in Kurzform geschrieben. (zB break-> b)
・ Pausenbezogen
Befehl | bewirken |
---|---|
b func1 | Setzen Sie einen Haltepunkt auf die Funktion func1 |
b test.c:123 | test.Setzen Sie einen Haltepunkt in Zeile 123 von c |
w var1 | Setzen Sie den Watchpoint auf die Variable var1 |
i b | Haltepunktliste anzeigen |
d no | Entfernen Sie Haltepunkte, die Zahlen entsprechen |
・ Ausführungsbezogen
Befehl | bewirken |
---|---|
n | Schrittausführung(Zeile für Zeile ausführen/Funktion überspringt) |
s | Schrittausführung(Zeile für Zeile ausführen/Gehen Sie in eine Funktion) |
c | Führen Sie die Verarbeitung bis zum nächsten Haltepunkt aus |
f | Führen Sie die Verarbeitung aus, bis Sie die aktuelle Funktion verlassen |
u | Führen Sie die Verarbeitung aus, bis Sie die aktuelle Schleife verlassen |
ret -1 | Gibt die aktuelle Funktion zurück-Zwangsbeendigung als 1 * Nachfolgende Verarbeitung wird nicht ausgeführt |
·Referenz
Befehl | bewirken |
---|---|
p var1 | Siehe den Wert der Variablen var1 (Wenn es sich um eine Struktur handelt, a.Sie können auf Mitgliedsvariablen mit b verweisen. Wenn es ein Zeiger ist*Sie können den Inhalt mit fp usw. sehen. p strlen(buf)、p buf[3]、p a->Sie können b usw. ziemlich flexibel sehen) |
bt | Rückverfolgung(Pfad zum Aufrufen der aktuellen Funktion)Show |
l | Quellcode anzeigen |
Info Makro Makroname | Überprüfen Sie die Makrodefinition |
i lo | Alle lokalen Variablen anzeigen |
・ Umschreiben des Wertes
Befehl | bewirken |
---|---|
p var1=-1 | Der Wert der Variablen var1-Wechseln Sie zu 1 |
Sie können die in Bash usw. verwendeten Verknüpfungen verwenden. (Beispiel: Bewegen Sie den Cursor mit Strg + a an den Zeilenanfang. Referenz: Verwendung von readline) Außerdem werden Variablennamen und Befehle in gdb mit der Tabulatortaste vervollständigt. (In einer alten Umgebung ist dies möglicherweise nicht möglich.)
Führen Sie set print elements 0
aus, um alle Informationen zu Speicher und Struktur anzuzeigen.
(Große Arrays und Strukturen werden standardmäßig nur zur Hälfte angezeigt.)
Drücken Sie Strg-x und dann 1 oder 2, um den TUI-Modus aufzurufen. Der Bildschirm ist zweigeteilt, und Sie können den obigen Befehl ausführen, während Sie den Quellcode betrachten. http://d.hatena.ne.jp/murase_syuka/20150912/1442021005
Für Programme, die untergeordnete Prozesse erzeugen, können die folgenden Befehle zum Debuggen untergeordneter Prozesse verwendet werden.
set follow-fork-mode child
http://flex.phys.tohoku.ac.jp/texi/gdb-j/gdb-j_toc.html http://sourceware.org/gdb/current/onlinedocs/gdb/
Recommended Posts