Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:gdb:crashcoursegdb [2019-03-05 09:35] – mgehrig2 | software:gdb:crashcoursegdb [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Crashcourse gdb ====== | ||
- | ===== Tutorial ===== | ||
- | Ein guter Einstieg bietet auch dieses 20 Minuten [[https:// | ||
- | |||
- | {{: | ||
- | |||
- | |||
- | ===== Vorbereitung ===== | ||
- | Damit eine Applikation mit dem //gdb// debugged werden kann, muss es mit **Debug Symbolen** kompiliert werden. | ||
- | Dazu kann für nicht Realtime Applikationen der "Build type" auf '// | ||
- | |||
- | CMAKE:\\ | ||
- | '' | ||
- | |||
- | Dadurch werden Debugsymbole hinzugefügt und die Applikation wird nicht optimiert. | ||
- | Nicht optimierte Applikationen vereinfachen das Debugging, da das nicht optimierte Binary grössten teils dem Sourcecode entspricht. | ||
- | Mit Optimierung können einzelne Variablen wegoptimiert werden. | ||
- | |||
- | Realtime Applikationen dürfen aber normalerweise nicht optimiert werden, da die TODO | ||
- | |||
- | |||
- | gcc / g++\\ | ||
- | '' | ||
- | '' | ||
- | |||
- | |||
- | ===== gdb öffnen ===== | ||
- | //gdb // | ||
- | '' | ||
- | |||
- | oder ohne Argumente: | ||
- | '' | ||
- | |||
- | Um die Applikation mit Root Rechten zu starten, muss der //gdb// ebenfalls mit Root Rechten gestartet werden ('' | ||
- | |||
- | |||
- | ===== Weitere nützliche Befehle ===== | ||
- | |||
- | ^**Befehl** | ||
- | | run | Startet die Applikation im //gdb// | | ||
- | | kill | Bricht die Applikation ab | | ||
- | | quit | beendet die Applikation | | ||
- | | help | | | ||
- | | list | Zeigt den Sourcecode an | | ||
- | | b <18> | Breakpoint @ Zeile 18 | | ||
- | | b if x==1 | Breakpoint mit Bedingung | | ||
- | | print x | Zeigt den Inhalt der Variable | | ||
- | | info locals | Alle Informationen über lokale Variablen | | ||
- | | set var < | ||
- | | backtrace | backtrace z.B. bei Segfault | | ||
- | | attach <PID> | den //gdb// an eine laufende Applikation anhängen | | ||
- | |||
- | |||
- | ===== SIGINT ohne ' | ||
- | '' | ||
- | Sobald das geschieht, pausiert der //gdb// | ||
- | Dies kann aber verhindert werden. | ||
- | |||
- | ^**Befehl** | ||
- | | info signals | Zeigt das aktuelle Verhalten bei diversen Signalen an | | ||
- | | handle 2 nostop | //gdb// pausiert nicht mehr bei einem Interrupt Signal | | ||