Tools unter Linux ---gdb

1. Einführung in GDB

GDB, die Abkürzung für The GNU Project Debugger, ist ein umfassendes Debugging-Tool unter Linux. GDB unterstützt Haltepunkte, Einzelschrittausführung, Drucken von Variablen, Beobachten von Variablen, Anzeigen von Registern, Anzeigen von Stapeln und andere Debugging-Methoden.

Es gibt zwei Möglichkeiten, Programme freizugeben: den Debug-Modus und den Release-Modus
Für Binärprogramme, die von Linux gcc/g++ erstellt wurden, ist der Standard-Release-Modus
Um das GDB-Debugging zu verwenden, müssen Sie die Option -g hinzufügen, wenn Sie ein Binärprogramm aus dem Quellcode generieren

2. Grundlegende Befehlsoperationen von gdb

1. Geben Sie gdb ein: gdb + Name des ausführbaren Programms

2. Beenden Sie GDB: Strg + D oder beenden Sie den Debugging-Befehl

3. Anzeigecode: l

Geben Sie die Liste ein, um den Code anzuzeigen, abgekürzt als l. Es werden nicht alle Codes gleichzeitig angezeigt.
Da gdb historische Befehle aufzeichnet, also den aktuellsten Befehl, können Sie, wenn keine Änderung am Befehl vorliegt, die Eingabetaste drücken, um mit der Ausführung des Befehls fortzufahren.

4. Starten Sie das Debuggen: r

r : Debuggen starten. Wenn kein Haltepunkt vorhanden ist, wird es direkt beendet

5. Haltepunkt: b Zeilennummer

6. Haltepunktinformationen anzeigen: info b

7. Haltepunkt löschen: d-Nummer

Da das System den Haltepunkt nummeriert, wenn er unterbrochen ist, kann die Zeilennummer beim Löschen nicht verwendet werden. Sie können die Nummer zum Löschen verwenden.

8. Prozess für Prozess: n

(gdb) n
7	  for(i = 0;i <= 100;i++)
(gdb) n
9	    res+=i;

9. Aussage für Aussage: s

(gdb) s
7	  for(i = 0;i <= 100;i++)

10. Führen Sie die aktuelle Funktion direkt aus und stoppen Sie: Fertig stellen

(gdb) finish
Run till exit from #0  AddToTop (top=100) at mytest.c:7
0x0000000000400579 in main () at mytest.c:18
18	  int result = AddToTop(top);
Value returned is $1 = 5050
(gdb) bt
#0  0x0000000000400579 in main () at mytest.c:18

11. Geben Sie den Stapel ein: bt

(gdb) bt
#0  AddToTop (top=100) at mytest.c:7
#1  0x0000000000400579 in main () at mytest.c:18

12. Immer anzeigen: Variablennamen anzeigen

(gdb) display res
1: res = 0
(gdb) n
7	  for(i = 0;i <= 100;i++)
1: res = 0
(gdb) n
9	    res+=i;
1: res = 0
(gdb) n
7	  for(i = 0;i <= 100;i++)
1: res = 0
(gdb) n
9	    res+=i;
1: res = 0
(gdb) n
7	  for(i = 0;i <= 100;i++)
1: res = 1
(gdb) n
9	    res+=i;
1: res = 1

13. Normale Anzeige abbrechen: Nummer ausblenden

(gdb) undisplay 1
(gdb) n
7	  for(i = 0;i <= 100;i++)

14. Zur angegebenen Zeile springen: bis zur angegebenen Zeile

(gdb) until 18
0x0000000000400579 in main () at mytest.c:18
18	  int result = AddToTop(top);

15. Zum nächsten Haltepunkt laufen und anhalten: c

(gdb) c
Continuing.
result:5050
[Inferior 1 (process 18009) exited normally]

16. Haltepunkte deaktivieren: Nummer deaktivieren

(gdb) disable 1
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep n   0x000000000040053b in AddToTop at mytest.c:6
	breakpoint already hit 1 time

Beachten Sie, dass sich das Ende von Haltepunkt 1 in n ändert, was darauf hinweist, dass er deaktiviert ist.

17. Nicht deaktivierbar: Nummer aktivieren

(gdb) enable 1
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040053b in AddToTop at mytest.c:6
	breakpoint already hit 1 time

 

おすすめ

転載: blog.csdn.net/m0_69323023/article/details/134650027