2009-06-08 21 views
15

Ich beschloss, herauszufinden, wie unsere C/C + * nix-Praktiker den gdb-Debugger verwenden. HierWie verwenden Sie gdb?

ist das, was ich in der Regel verwenden:

  1. b - Pause filename.c: Zeile #, Funktion, filename.cpp: Funktion, classname :: Mitglied
  2. n, c, s - nächste continue step
  3. gdb programmname => set breakpoints ==> run [parameter list] (Ich setze Breakpoints vor dem Programmstart)
  4. l - um den umgebenden Quellcode aufzulisten.
  5. befestigen processID 6 Pause [Ort]
  6. gdb program corefile.core (zu untersuchen, warum App abgestürzt)
  7. Ich habe auch manchmal Haltepunkt an Exit-Funktion (Pause Ausfahrt) Programm stapelt
  8. info b zu prüfen, zu prüfen, alle Stützpunkte
  9. clear [Stützpunkte Liste]

Wie Sie es verwenden?

+0

Es war hilfreich. Warum nicht wenigstens ein Community-Wiki erstellen? –

+0

Ich stimme zu .. lass es uns wieder öffnen. –

Antwort

5

Am nützlichsten gdb Befehle meiner Meinung nach gdb (abgesehen von allen bereits aufgeführt):

  • info threads - Informationen über die Themen
  • Gewinde N - switch einzufädeln N
  • fangen Wurf - brechen Sie auf irgendeine geworfene Ausnahme ab. Nützlich, wenn Sie den Fehler erst nach dem Abwickeln des Stapels entdeckt haben.
  • printf, Druck - prüft alle und alle Ausdrücke, printf übernimmt C-Stil Formatierung Bezeich

Schließlich, wenn das Debuggen über eine langsame Verbindung, der Text-Benutzeroberfläche von Nutzen sein könnte. Um es zu verwenden, starte gdb mit dem Kommandozeilenschalter --tui.

4

GDB ist nicht meine Spezialität, aber hier ist das, was ich benutze:

  • bt Liste ein Stapel
  • up, down in einem Stapel bewegt
  • until als Strom, bis eine Linie mit einer größeren Zahl weiter ist erreicht - zum Beenden von Schleifen
  • watch [expr] brechen Sie das Programm, wenn Ausdruck wechselt

... aber meistens verwende ich als Frontend ddd

+0

ich benutze ddd auch:) ... irgendwelche tipps für ddd sind willkommen und ermutigt ... danke –

1

Es gibt auch ein paar Verwendungen, die nicht direkt mit dem Debugging verbunden sind. Zum Beispiel es kann für C Ausdrucksauswertung verwendet werden:

 
(gdb) printf "%lu\n", (unsigned long)(-3L) 
4294967293 
10

Scripting eine schöne GDB Funktion.

  1. Zuerst setzen Sie einen Haltepunkt, wie: b someFunction \ n.
  2. Dann führen Sie Befehl: Befehle \ n. GDB wird nach Befehlen für diesen Haltepunkt fragen.
  3. Gewöhnliches Szenario ist, einen Wert zu drucken und dann fortzufahren, so dass Sie eingeben: p someVar \ n continue \ n. Ctrl-D

Nach dem Ausführen von Programm, das Sie Ihr Skript gelegentlich ausgeführt werden sehen, wenn der Haltepunkt auftritt:

  • Um das Skript zu beenden, drücken Sie.

  • +2

    Für noch bessere gdb mit bessere scripting unterstützung, siehe PythonGdb - gdb in python – ASk

    12

    Neben Dinge, die bereits geschrieben wurden verwende ich auch:

    • eine .gdbinit Datei für STL-Containern
    • signal SIGNAL noprint nostop für einige benutzerdefinierte Signale, die keine wirkliche Interesse sind beim Debuggen
    • C-Casts Zeiger zu dereferenzieren
    • catchpoints (Fangwurf, Fangfang)
    • Zustand für bedingte Break- und Watchpoints
    • selten gdbserver für Remote-Debugging
    • gdb Programmcoredump, für jene peinliche segfaults;)

    PS: Ein Grund, warum ich persönlich gdb btw lieben. ist, dass es tab-completion für fast alles unterstützt (gdb-Befehle, Symbole in der Symboltabelle, Funktionen, Memberfunktionen usw.). Das ist meiner Meinung nach ein ziemlich guter Produktivitätsschub.

    3

    Geben Sie Strg-X Strg-A ein, um ein einfaches Fenster mit Quellvorschau zu öffnen.

    0

    Ich benutze die gdb -tui Schalter für eine große 'Text-Benutzeroberfläche' (eine Art GUI im Textmodus). Es unterstützt mehrere Fenster und ist in der Regel viel freundlicher als die ‚Liste‘ Befehl (da es die Quelle in einem September-Fenster zeigt)

    +0

    das ist, ich benutze tui mode wenn ich nicht mit gdb aus emacs (was ich normalerweise mache :) – horseyguy

    2

    Vor einiger Zeit fand ich cgdb:

    http://cgdb.sourceforge.net/

    Dies ist ein auf curses (Farbkonsolen) basierendes Frontend für gdb, das mein Leben viel glücklicher machte, als ich mich auf das Debugging in einem Konsolenfenster beschränkte.

    0

    Anfänger, die gdb verwenden, werden es als schwierig empfinden. Aber dort GUI-Tool DDD (Data Display Debugger), die gleiche wie gdb ist. Sie haben eine Konsole im unteren Bereich, um gdb-Befehle auszuführen, und der obere 3/4-Teil wäre der Code.Sie haben die Möglichkeit, die Befehle und den Durchfluss zu kennen und zu verstehen.