Stoppen an und Fortsetzen von einem Haltepunkt

Lernen ist der Debugger verwenden eines der wichtigsten Dinge, die Sie up-Spiel tun können Ihre C ++. Was folgt, sind die Schritte notwendig, um einen Haltepunkt zu setzen, das Programm zu stoppen, prüfen einige Variablen, und das Programm wieder aufzunehmen.

Ab Frühjahr 2014 wird Code :: Blocks nicht mit dem Debugger für den Mac, zu integrieren, so, wenn Sie einen Mac-Benutzer diese Beispiele sind möglicherweise nicht für Sie arbeiten.

Was ist ein Debugger?

Bevor Sie weiter, kann es helfen, wenn Sie verstehen, was ein Debugger ist. EIN Debugger ist ein separates Programm, das Sie steuern Ihre Ausführung Programm ermöglicht. Spezifisch ermöglicht es Ihnen die Ausführung des Programms an bestimmten Codezeilen zu stoppen, um den Wert der Variablen zu untersuchen, um den Wert der Variablen zu ändern, und die Ausführung des Programms fortzusetzen.

Der GNU Debugger verfügt über eine Befehlszeilenschnittstelle, die sowohl schwierig ist, sich zu erinnern und schwer zu bedienen (das ist eine gelungene Kombination, wenn Sie jemals einen gehört habe). Glücklicherweise bietet Code :: Blocks eine nahezu nahtlose grafische Schnittstelle für den GNU-Debugger. Während Sie sich auf den Editor-Fenster klicken und aktivieren Drop-Down-Menüs, sendet Code :: Blocks kryptische Befehle an den Debugger im Hintergrund und interpretiert dann und zeigt grafisch die Ergebnisse. Ist es nicht toll, wenn zwei Programme Geplauder im Hintergrund Sie speichern arbeiten?

Der beste Weg, um den Debugger zu lernen, ist nur diese Beispiele zu folgen.

Einrichten Ihres Programms verwenden, um den Debugger

Sie müssen Ihr Programm mit speziellen Compiler-Einstellungen zu bauen, wenn Sie es unter Kontrolle des Debuggers ausgeführt werden soll. Der einfachste Weg, dies zu tun, ist gleich am Anfang, wenn Sie zuerst Ihr Projekt erstellen. Nachdem Sie angegeben haben, dass Sie eine Konsole-Anwendung erstellen möchten, und sofern der Name des Programms, Code :: Blocks werden Sie gefragt, ob Sie Ihr Programm in Debug-Konfiguration, Release-Konfiguration aufbauen wollen, oder beide, wie in der Abbildung 1 gezeigt Seien Sie. Sie sicher, dass Debug-Konfiguration aktiviert ist.

Abbildung 1: Das Projekt-Assistent gibt Ihnen die Möglichkeit, eine Debug-Konfiguration angeben, wenn Sie Crea
Abbildung 1: Das Projekt-Assistent gibt Ihnen die Möglichkeit, eine Debug-Konfiguration angeben, wenn Sie das Projekt erstellen.

Ein Programm im Debug-Konfiguration umfasst eine Menge von zusätzlichen Informationen, dass der Debugger, um ihre Magie zu tun braucht. Zu diesen Informationen gehören

  • Die Adresse jeder Zeile von C ++ Quellcode

  • Die Adresse der einzelnen Variablen

  • Die Namen und Make-up jeder Klasse in Ihrem Programm

All diese Debugger Informationen ergänzt das ausführbare Programm viel Masse - Hunderte von Kilobyte oder mehr. Dieser Raum ist völlig unnötig, wenn Sie das Programm unter Kontrolle des Debuggers, so Code :: Blocks gibt Ihnen die Möglichkeit, Gebäude ausführbare Dateien ohne diese Informationen laufen in nicht beabsichtigen, was als Release-Konfiguration bekannt ist. Release-Programme sind kleiner, schneller geladen werden, und noch schneller auszuführen.

Wenn Sie beide Debug aktivieren und Release-Konfigurationen in Ihrem Projekt, dann erhalten Sie bei der Erstellung, welche Art von ausführbaren Datei zu wählen, die Sie versuchen zu bauen.

Es gibt zwei Unterschiede zwischen den Debug and Release-Konfigurationen:

  • Die Debug-Konfiguration umfasst die -G Compiler-Option.

    Diese Option teilt dem Compiler mit Symbolinformationen in der letzten ausführbaren Datei zu schließen. Das ist alles, das Zeug oben erwähnt - die Adresse jeder Zeile des Codes und von jeder Variablen sowie eine Beschreibung jeder Klasse in Ihrem Programm verwendet.

  • Der Code-Optimierer ist in Debug-Konfiguration und eingeschaltet in der Release-Konfiguration ausgeschaltet.

    Das GNU-Code-Optimierer generiert Programme, die schneller ausführen, aber es tut dies, indem Anweisungen um in einer Weise zu bewegen, die ziemlich verwirrend sein kann, wenn Sie Ihr Programm debuggen. Die Release-Konfiguration beinhaltet nicht die -G Schalter und ermöglicht ein gewisses Maß an Optimierung durch die Einbeziehung der -O Schalter.

Stellen Sie sicher, dass Sie derzeit die Debug-Release bauen, indem Sie beim Aufbau-Select Target-Debug, wie in der Abbildung 2 dargestellt.

Abbildung 2: Sie müssen noch sicherstellen, dass Sie die debug ausführbare Datei erstellen, auch wenn Sie
Abbildung 2: Sie haben noch dafür sorgen, dass Sie die debug ausführbare bauen, auch wenn Sie Debug-Konfiguration aktiviert, wenn Sie Ihr Projekt erstellt.

Erstellen Sie Ihre Programm durch Auswahl Errichten-neu erstellen.

Anhalten an einem Haltepunkt

Um einen Haltepunkt setzen, klicken Sie einfach in der Gegend nur nach rechts von der Zeilennummer - dieses Gebiet ist bekannt, in Code :: Blocks parlance als die Trog. Nicht nur erscheint die Zeile eine andere Farbe, was darauf hinweist, dass der Editor sie ausgewählt hat, aber ein kleines Stoppschild erscheint in der Mulde, dass dies ein Hinweis darauf, wie in Abbildung 3 gezeigt, ein Haltepunkt in Zeile 11 festgelegt wurde.

Abbildung 3: Code :: Blocks verwendet eine niedliche kleine Stop-Schild, um anzuzeigen, wenn ein Haltepunkt gesetzt ist.
Abbildung 3: Code :: Blocks verwendet eine niedliche kleine Stop-Schild, um anzuzeigen, wenn ein Haltepunkt gesetzt ist.

Sie können so viele Haltepunkte setzen, wie Sie auf einmal wollen, aber dieser Haltepunkt wird für dieses Beispiel in Ordnung sein.

Hier können Sie das Programm starten mit der Debug-Start / Option in Abbildung 4 dargestellt Weiter.

Abbildung 4: Start (oder fortsetzen) Ausführung Ihres Programms mit die Debug ->Start / Weiter Menü opti
Abbildung 4: Start (oder Lebenslauf) Ausführung Ihres Programms das Debug mit -> Start / Menüpunkt Weiter.

Das Programm beginnt mit der Ausführung wie normal, aber hält fast sofort mit einem kleinen gelben Pfeil, der auf Zeile 11, wie in Abbildung 5. Zusätzlich gezeigt, wird ein leeres Fenster, die normalerweise die Programmausgabe enthalten würde erscheint. Nichts erscheint in der Programmausgabe, da die Leitung 11 hat noch auszuführen.

Abbildung 5: Die Programmausführung wird beendet, sobald das Programm auf einen Haltepunkt.
Abbildung 5: Die Programmausführung wird beendet, sobald das Programm auf einen Haltepunkt.

Beeindruckend! Das ist cool.

Wiederaufnehmen der Ausführung eines Programms,

Sie könnten einen Haltepunkt in der nächsten Zeile gesetzt, und wählen Sie Debug-Start / Weiter zur nächsten Zeile Ausführung des Programms fortzusetzen, wenn Sie jedoch wanted-, da dies eine solche gemeinsame Sache zu tun, Code :: Blocks bietet die Debug-Next Line-Option, was bedeutet, "Führen Sie das Programm in die nächste Zeile."

Andernfalls tritt das Programm vorübergehend zu blinken als Kontrolle, um das Programm geht gerade lang genug Zeile auszuführen 11, bevor er wieder zum Stillstand kommen, wie in Abbildung 6 gezeigt.

Abbildung 6: Ausführen der nächsten Zeile Befehl bewirkt, dass der Debugger eine Zeile in dem Programm auszuführen.
Abbildung 6: Ausführen der nächsten Zeile Befehl bewirkt, dass der Debugger eine Zeile in dem Programm auszuführen.

Sie können diesen Vorgang so oft wiederholen, wie Sie möchten, effektiv meinen Weg durch das Programm in Einzelschritten.

Wenn Sie zu einem Funktionsaufruf kommen, bleibt nächste Zeile in der aktuellen Funktion, die gesamte Funktion ausführt, als ob es nur eine einzige Linie waren (was es auf dieser Ebene). Wenn Sie die Kontrolle über den Funktionsaufruf übergeben möchten, wählen Sie Debug-Step Into statt. Dies funktioniert nur für Funktionen, für die Sie den Quellcode haben - das funktioniert nicht sehr gut für C ++ Library-Funktionen.

Jedes Mal, wenn Sie müde von Einzelschritten um, können Sie das Programm beenden, indem Sie Debug-Stop-Debugger. Nicht nur, dass dieser Anschlag den Debugger, aber es hält Ihr Programm als gut.

Prüfungs Variablen

Einzelschritt durch Ihr Programm ist eine großartige Möglichkeit, um ein Gefühl für, wo Ihr Programm erhalten wird, aber es kann schwierig sein, zu verstehen, warum, wenn Sie die Variablen untersuchen können, ist es mit Entscheidungen zu treffen. Zum Beispiel, wenn Sie das Beispielprogramm Einzelschritt, können Sie die Kontrolle feststellen, nicht in die für Schleife überhaupt. Warum das?

Sie beenden das Programm mit einem Debug-Stop-Debugger Auswählen oder Drücken von Shift + F8 und Neustart von Debug-auf Start / Fortsetzen oder F8 drücken. Single-step durch Debug-Next Zeile Auswahl oder bis zur Ausführung drücken F7 erreicht den Beginn der für Schleife.

Dieses Mal, stellen Sie sicher, dass das Watch-Fenster, indem Sie Debug-Debuggen von Windows-Uhren sichtbar ist. Ein Fenster wie in Abbildung 7 erscheint und zeigt die Werte der Argumente und alle lokalen Variablen. Beachten Sie, dass nNumberofArgs 1 ist, nur der Name des Programms selbst. Da ich mit einem Wert von 1 beginnt, wird die Schleife wird nie ausgeführt werden. Fügen Sie die Uhr Variablen pszArgs [0] und pszArgs [1], um zu sehen, was sie enthalten: den Namen des Programms und einem Null. Aha! Das Programm hat keine Argumente zu iterieren.

Abbildung 7: Das Überwachungsfenster ermöglicht dem Programmierer, den Wert der Variablen anzuzeigen.
Abbildung 7: Das Überwachungsfenster ermöglicht dem Programmierer, den Wert der Variablen anzuzeigen.

Sie können Argumente 'Projekt-Set Programme indem Sie die Argumente, um das Programm zu ändern. In diesem Fenster können Sie setzen, was Argumente, die Sie wollen.

Beachten Sie, dass das Watch-Fenster zeigt mir den Namen der Variablen, seiner Art und seinen Wert. Sie können nicht seine Art ändern, aber Sie können den Wert aus diesem Fenster zu ändern, wenn Sie möchten. Das Ändern des Wertes nNumberofArgs ist nicht sehr nützlich, aber manchmal den Wert einer Variablen zu ändern ermöglicht es mir, die Ausführung nur einen anderen Weg zu zwingen, um zu sehen, was passieren könnte.

Fortsetzung ein gestopptes Programm

Ein Trick, sich daran zu erinnern ist, dass es manchmal verwirrend bekommen kann, warum ein Programm gestoppt wird. Nicht alle Programme, die beendet werden, sind unter der Kontrolle des Debuggers. Manchmal warten sie für die Eingabe von dem Benutzer.

Um diesen Effekt, Single-Step das PrintArgs Programm sehen, bis die Steuerleitung erreicht 26. Wenn Sie nächste Zeile auswählen, verschwindet der Cursor wie in Abbildung 8. Vorbei die angenehme gelben Pfeil ist, die Sie daran erinnert, wo man im Programm bin. Was ist passiert?

Abbildung 8: Kontrolle zu gehen weg erscheint, wenn das Programm auf eine Benutzereingabe wartet.
Abbildung 8: Kontrolle zu gehen weg erscheint, wenn das Programm auf eine Benutzereingabe wartet.

Was passiert ist, ist, dass das Programm wartet auf mich auf der Tastatur zu drücken Sie die Eingabetaste. Zuerst müssen Sie das Programmfenster auswählen. Dann können Sie die Eingabetaste drücken (Sie müssen möglicherweise mehr als einmal zu tun). Nachdem das getan ist, scheint nichts im Programmfenster zu passieren, weil jetzt die Kontrolle zurück an den Debugger im Code :: Blocks Fenster bestanden hat. Wenn Sie das Fenster wieder auswählen, sehen Sie die beruhigende gelben Pfeil mir zu sagen, dass Code :: Blocks wieder unter Kontrolle ist.

Wenn Sie Ihr Programm unter dem Debugger und Steuerung erscheint die Ausführung einfach weg zu gehen, kann das Programm für die Eingabe von der Tastatur warten. Umschalten auf das Programmfenster zu sehen, ob das der Fall ist. Wenn ja, sobald Sie etwas eingeben, die Steuerung wird an den Debugger wieder zurück.

Menü