Ich habe help eingegeben, während ich in der GDB war, aber nichts über Step-in, Step gefunden -over und step-out. Ich habe einen Haltepunkt in ein Assembly-Programm in _start (break _start) eingefügt. Danach habe ich next und das Debuggen wurde beendet. Ich denke, es lag daran, dass es _start beendet hat und nicht „t Schritt in wie ich wollte.

Wer kann helfen?

Kommentare

  • Lesen Sie die vollständigen GDB-Dokumente. Soweit ich mich erinnere, waren sie sehr hilfreich, als ich es zum ersten Mal lernte. Leider musste ich ' mehrere Jahrzehnte lang kein Programm auf dieser Ebene debuggen, sodass die tatsächlichen Befehle in meinem Gehirn ausgelagert zu sein scheinen. Ich kann also ' nicht wirklich eine Antwort schreiben. Wenn Sie es jedoch aus den Handbüchern herausfinden, können Sie Ihre eigene Frage für einen Bonus beantworten.
  • @MAP Ich ' werde es erneut versuchen. Ich habe versucht, einen besseren Debugger (KDbg) zu verwenden, aber ' gelingt es nicht, ihn in Ubuntu zu verwenden / li>
  • gdb ist ein guter Debugger. Vielleicht möchten Sie Emacs als Frontend verwenden.
  • gdb ist ein schrecklicher Debugger. Es gibt eine Vielzahl von Erweiterungen, die sich damit befassen, wie viel es saugt. Schreckliche Syntax, nicht konsostente Befehle, klobiges schreckliches Paging, archaische Formatierung, ' haben keinen Hexdump. Also nein, es ist ' kein guter Debugger. Wenn Sie glauben, dass dies der Fall ist, haben Sie ' keinen guten Debugger verwendet.

Antwort

help running enthält einige Hinweise:

Es gibt step und next Anweisungen (und auch nexti und stepi).

(gdb) help next Step program, proceeding through subroutine calls. Usage: next [N] Unlike "step", if the current source line calls a subroutine, this command does not enter the subroutine, but instead steps over the call, in effect treating it as a single source line. 

Wir können also sehen, dass step in Unterprogramme eintritt, aber next einen Schritt ausführt über Unterprogramme.

Die step und stepi (und die next und nexti) unterscheiden sich durch „Zeilen“ – oder „Anweisungs“ -Inkremente.

step -- Step program until it reaches a different source line stepi -- Step one instruction exactly 

Verwandte Themen sind finish:

(gdb) help finish Execute until selected stack frame returns. Usage: finish Upon return, the value returned is printed and put in the value history. 

Weitere nützliche Informationen finden Sie unter https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html

Kommentare

  • Was macht das? bedeutet mit bis es eine andere Quellzeile erreicht ?
  • for(i=0;i<10;i++) { printf("%d\n",i); } ist eine Quellzeile, aber mehrere Anweisungen.
  • Gibt es eine Möglichkeit zum Ausstieg? ' konnte es nicht in der laufenden Hilfe finden.
  • Was meinen Sie mit " step-out "? Der Befehl finish vervollständigt den aktuellen Stapelrahmen, der normalerweise die aktuelle Unterroutine vervollständigt und zum Aufrufer zurückkehrt.
  • finish oder fin in GDB ist die step-out in IDEA oder Eclipse.

Antwort

Ich bin hierher gekommen, weil ich dieselbe Frage hatte . Ich dachte mir schließlich, dass ich für meinen Zweck jedes Mal, wenn ich so etwas wie „Aussteigen“ aus einer Schleife verwenden könnte, einfach einen anderen Haltepunkt nach der Schleife setzen und dann das Programm continue beenden lassen könnte die Schleife und laufen in den Haltepunkt danach. Es tut uns leid, wenn dies für die meisten Menschen offensichtlich ist, aber es ist wahrscheinlich hilfreich für jemanden, der nach einer Antwort auf diese Frage sucht.

Antwort

Verwenden Sie den Befehl „beenden“; Dies macht manchmal das Gleiche wie „Step-out“. Es beendet, was der Stapel tut (normalerweise eine Funktion), und geht danach zur nächsten Zeile. Weitere Informationen finden Sie im Befehl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.