Im Bereich der Embedded-Entwicklung ist das Debuggen ein entscheidender Schritt, um den stabilen Betrieb eines Programms sicherzustellen. Für Entwickler, die das OKMX8MP-C-Entwicklungsboard verwenden, kann die Beherrschung der GDB-Remote-Debugging-Techniken die Entwicklungseffizienz erheblich steigern. GDB, kurz für The GNU Project Debugger, ist ein umfassendes Debugging-Tool unter Linux. GDB unterstützt eine Vielzahl von Debugging-Methoden, darunter das Setzen von Haltepunkten, die Einzelschrittausführung, das Drucken von Variablen, das Beobachten von Variablen, das Untersuchen von Registern und das Anzeigen des Aufrufstapels.
In der Softwareentwicklung für Linux-Umgebungen ist GDB das primäre Debugging-Tool zum Debuggen von C- und C-Programmen. Die Version 5.4.70 von OKMX8MP-C bietet standardmäßig Unterstützung für gdbserver, und unsere bereitgestellte Entwicklungsumgebung unterstützt standardmäßig auch gdb. Als Nächstes erfahren Sie, wie Sie das GDB-Remote-Debugging auf dem OKMX8MP-C durchführen.
forlinx@ubuntu:~$ $CC -g test_bug.c -o test_bug
Dieser Befehl kompiliert die Quelldatei test_bug.c und generiert eine ausführbare Datei test_bug mit enthaltenen Debugging-Informationen. Auf diese Weise kann GDB bei nachfolgenden Debugging-Prozessen die entsprechenden Positionen im Quellcode genau lokalisieren.
Nach der Kompilierung muss die generierte ausführbare Datei auf das Entwicklungsboard kopiert werden. Dies wird normalerweise über eine serielle Schnittstelle, ein Netzwerk oder andere Dateiübertragungsmethoden erreicht. In diesem Beispiel gehen wir davon aus, dass die test_bug-Datei in das /-Verzeichnis auf dem Entwicklungsboard kopiert wurde.
Stellen Sie die IP-Adresse ein:
Verwenden Sie den Befehl ifconfig, um die IP-Adresse für das Entwicklungsboard festzulegen. Zum Beispiel:
ifconfig eth0 172.16.0.109
Hier ist die IP-Adresse des Entwicklungsboards auf 172.16.0.109 eingestellt
Starten Sie gdbserver auf der Entwicklungsplatine und geben Sie die Nummer des Überwachungsports und das zu debuggende Programm an. Zum Beispiel:
gdbserver 172.16.0.109:2345 /test_bug
Dieser Befehl startet gdbserver und überwacht Port 2345 auf Verbindungsanfragen vom GDB-Client.
root@OK8MP:~# ifconfig eth0 172.16.0.109
root@OK8MP:~# gdbserver 172.16.0.109:2345 test_bug
Prozess /home/root/test_bug erstellt; pid = 1356
Abhören von Port 2345
Legen Sie auf der virtuellen Maschine oder dem Host eine IP-Adresse innerhalb desselben Netzwerksegments wie das Entwicklungsboard fest und verwenden Sie den Ping-Befehl, um die Konnektivität mit dem Entwicklungsboard zu testen.
Stellen Sie sicher, dass die IP-Adresse des Entwicklungsboards erfolgreich angepingt wird, was eine Voraussetzung für das Remote-Debugging ist.
Verwenden Sie auf der virtuellen Maschine oder dem Host den Befehl aarch64-poky-linux-gdb, um den GDB-Client zu starten und das zu debuggende Programm anzugeben. Zum Beispiel:
forlinx@ubuntu:~/ aarch64-poky-linux-gdb test_bug
GNU gdb (GDB) 8.3.1
Copyright (C) 2019 Free Software Foundation, Inc.
Lizenz GPLv3: GNU GPL Version 3 oder höher http://gnu.org/licenses/gpl.html
Dies ist freie Software: Es steht Ihnen frei, sie zu ändern und weiterzuverbreiten.
Es besteht KEINE GEWÄHRLEISTUNG, soweit gesetzlich zulässig.
Geben Sie „Kopieren anzeigen“ und „Garantie anzeigen“ ein, um Einzelheiten anzuzeigen. Diese GDB wurde als „--host=x86_64-pokysdk-linux --target=aarch64-poky-linux“ konfiguriert.
Geben Sie „Konfiguration anzeigen“ ein, um Konfigurationsdetails anzuzeigen.
Anweisungen zur Fehlerberichterstattung finden Sie unter:
http://www.gnu.org/software/gdb/bugs/
Das GDB-Handbuch und andere Dokumentationsressourcen finden Sie online unter:
http://www.gnu.org/software/gdb/documentation/
Geben Sie für Hilfe „Hilfe“ ein.
Geben Sie „apropos Wort“ ein, um nach Befehlen zu suchen, die sich auf „Wort“ beziehen...
Symbole aus test_bug lesen...
(gdb)
Mit dem Board verbinden:
Verwenden Sie im GDB-Client den Ziel-Remote-Befehl, um eine Verbindung zum gdbserver auf der Platine herzustellen. Zum Beispiel:
(gdb) Zielfernbedienung 172.16.0.109:2345
Remote-Debugging mit 172.16.0.109:2345
Lesen von /lib/ld-linux-aarch64.so.1 vom Remote-Ziel...
Warnung: Dateiübertragungen von entfernten Zielen können langsam sein. Verwenden Sie stattdessen „set sysroot“, um lokal auf Dateien zuzugreifen.
Lesen von /lib/ld-linux-aarch64.so.1 vom Remote-Ziel...
Symbole aus dem Ziel lesen:/lib/ld-linux-aarch64.so.1...
/lib/ld-2.30.so vom Remote-Ziel lesen...
Lesen von /lib/.debug/ld-2.30.so vom Remote-Ziel...
Lesen von /lib/.debug/ld-2.30.so vom Remote-Ziel...
Symbole aus dem Ziel lesen:/lib/.debug/ld-2.30.so...
0x0000fffff7fcf080 in _start() von target:/lib/ld-linux-aarch64.so.1
(gdb)
An diesem Punkt stellt der GDB-Client eine Verbindung zum gdbserver auf der Platine her und ist bereit, mit dem Remote-Debugging zu beginnen.
l (Liste): Listet den Quellcode auf.
b (break): Setzt einen Haltepunkt.
n (next): Geht Zeile für Zeile durch den Code.
s (Schritt): Schritte in Funktionen zur zeilenweisen Ausführung.
c (continue): Setzt die Programmausführung fort.
p (print): Druckt den Wert einer Variablen.
Verwenden Sie beispielsweise den Befehl l, um den Quellcode am aktuellen Speicherort anzuzeigen:
(gdb) l
12 }
13
14 void A(int *p)
15 {
16 B(p);
17 }
18
19 void A2(int *p)
20 {
21 C(p);
(gdb)
Dann können Sie den B-Befehl verwenden, um einen Haltepunkt in einer Zeile festzulegen, z. B. Zeile 16:
Bash-Kopiercode
(gdb) b 16
Haltepunkt 1 bei 0x...: Datei test_bug.c, Zeile 16.
Verwenden Sie den c-Befehl, um mit der Ausführung des Programms fortzufahren. Das Programm bleibt am Haltepunkt stehen und wartet auf weiteres Debuggen.
Variablenüberwachung: Verwenden Sie den Befehl watch, um Variablenänderungen zu überwachen. GDB unterbricht die Ausführung automatisch, wenn sich der Wert der Variablen ändert.
Multithread-Debugging: Wenn das Programm multithreaded ist, verwenden Sie den Thread-Befehl, um Threads für das Debuggen zu wechseln.
Sicherheitsüberlegungen: Die Gewährleistung der Sicherheit der Netzwerkumgebung ist beim Remote-Debugging von entscheidender Bedeutung. Verwenden Sie SSH-Tunnel oder andere Verschlüsselungsmethoden, um die Datenübertragung beim Debuggen zu schützen.
Das sind alle OKMX8MP-C GDB-Remote-Debugging-Fähigkeiten. Dieses leistungsstarke Tool ermöglicht eine effiziente Problemlösung und Entwicklungsverbesserung.
Das obige ist der detaillierte Inhalt vonOKMX-C GDB-Remote-Debugging-Fähigkeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!