2009-09-24 9 views

Antwort

126
  1. Backtrace voll definiert Rahmen bewegen sich durch
  2. Uhr: Unterbricht den Prozess, wenn eine bestimmte Bedingung erfüllt ist
  3. Satz Druck ziemlich auf: hübsch formatierte C-Quellcode
  4. set logging Druckt auf: Debug-Sitzung anmelden für
  5. Unterstützung für andere zeigen
  6. Set-Druckarray auf: Hübsches Reihendruck
  7. Finish: Weiter bis zum Ende der Funktion
  8. aktivieren und deaktivieren : Enab le/deaktivieren Stützpunkte
  9. tbreak: Break einmal, und entfernen Sie dann den Haltepunkt
  10. wo: Zeilennummer zur Zeit
  11. info Einheimischen ausgeführt wird: Alle lokalen Variablen
  12. info args : Alle Funktionsargumente anzeigen
  13. Liste: Quelltext anzeigen
  14. RBREAK: Pause auf Funktion regulärer Ausdruck
+5

'info local's - Alle lokalen Variablen anzeigen; Liste - Quelle anzeigen; rbreak - break on Funktion, die zu regulärem Ausdruck passt. –

+0

Quelle/Pfad/zu/Makro/Datei Und all meine raffinierten Makros sind da, um mir in Sekunden zu debuggen. – Sudhanshu

+1

'set print object 'für polymorphe Elemente und' set print elements 0 'sind zwei Befehle, die ich sehr oft verwende. Ziemlich nützlich. –

13

thread apply all bt oder thread apply all print $pc passend: Für schnell herauszufinden, was alle Themen tun.

+0

Das war der Befehl, nach dem ich lange gesucht habe! Es ist wirklich scheußlich, alle 30 Threads nacheinander zu überprüfen! – tothphu

+0

AKA: t a a bt. –

94

startet gdb mit einem Text Benutzeroberfläche

gdb -tui 
+18

Ich kann nicht glauben, dass mir dieses Feature all die Jahre entgangen ist. Danke danke danke! – DevSolar

+21

oder nur C-x C-a – elmarco

+0

Dank Sie gespeichert viel meiner Zeit .. Wonderfull .... – sujin

42

in gdb Ab 7.0 ist es reversible debugging, so dass Ihre neuer Liebling Befehle sind:

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse 
* reverse-finish -- Execute backward until just before the selected stack frame is called 
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls. 
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines. 
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line 
* reverse-stepi -- Step backward exactly one instruction 
* set exec-direction (forward/reverse) -- Set direction of execution. 
18

Statt GDB der Einführung mit "-tui" param Sie können nach einiger Zeit auch in den Textmodus wechseln, indem Sie "wh" eingeben.

+3

Wie wechselst du zurück? –

+3

Ctrl-a a, um zur 'normalen' Befehlszeilenansicht zurückzukehren! – Kevin

+2

"-" kann in 'wh' verwendet werden. Kürzer desto besser .. :) –

5

Scripting gdb ist ein guter Trick, außer dass ich mag Scheduler Sperren ein/aus, um das Ausführen anderer Threads zu verhindern, wenn Sie in einem einsteigen.

+1

Wie schalte ich das Scheduler-Locking ein? –

+3

'set scheduler-locking on 'innerhalb gdb – Ben

+0

Wie machen Sie das zum Standard? Ich versuchte es .gdbinit, aber gdb druckt /home/omry/.gdbinit:1: Fehler in der befehlsverwalteten Befehlsdatei: Ziel 'None' kann diesen Befehl nicht unterstützen. –

3
  • Mit .gdbinit (Start-Datei, wo Sie Makros schreiben und von gdb aufrufen können). Platz in Ihrem Home-Verzeichnis .gdbinit so dass es jedes Mal aufgenommen wird gdb geladen wird
  • info threads alle aktiven Threads zu verzeichnen, und f (#) -> # Thread-Nummer Sie

    wechseln wollen
  • manchmal benutze ich gdb von hex zu konvertieren dezimal oder binär, es ist sehr praktisch, statt Öffnung ein Rechner

    • p/d 0x10 - 0x10> gibt Dezimaläquivalents von 0x10
    • p/t - > binäres Äquivalent von 0x10
    • p/x 256 -> Hex-Äquivalent von 256
6

die -command=<file with gdb commands> Option verwenden, während gdb Anheizen. Wie -x <command file>. Diese Befehlsdatei kann gdb-Befehle wie Haltepunkte, Optionen usw. enthalten. Dies ist nützlich, wenn eine bestimmte ausführbare Datei mit gdb sukzessive debuggesteuert werden muss.

+0

Sie können auch die '-iex'-Option verwenden, um einzelne Befehle in der Befehlszeile von gdb hinzuzufügen. – doug65536

2

Dies kann nützlich sein, ich bin sicher, dass es zwar verbessert werden könnte, willkommen helfen:

define mallocinfo 
    set $__f = fopen("/dev/tty", "w") 
    call malloc_info(0, $__f) 
    call fclose($__f) 
4

Anstatt gdb mit der Option -tui zu starten, um einen untergeordneten Prozess zu sehen, der einen Bildschirm enthält, der hervorhebt, wo sich die ausführende Codezeile in Ihrem Programm befindet, springen Sie mit Cx o und Cx a in diese Funktion hinein und wieder heraus. Dies ist nützlich, wenn Sie das Feature verwenden und es vorübergehend nicht verwenden, sodass Sie mit dem Pfeil nach oben einen vorherigen Befehl abrufen können.

+2

Sie können den Fokus mit 'focus cmd' zum Befehlsfenster ändern, so dass die Pfeile nach oben/unten funktionieren. Sie wechseln mit 'focus src' zurück. –