Hallo und willkommen zurück.
In diesem Vortrag möchte ich Ihnen zeigen, wie Sie den Debugger verwenden können.
Ich möchte also die grafische Benutzeroberfläche durchgehen und Ihnen zeigen, wie Sie ein Programm im Debugging-Modus starten können,
wie Sie Haltepunkte setzen können, wie Sie sich den Aufrufstapel ansehen können und wie Sie verschiedene Variablen mit Hilfe des Beobachtungsfensters
betrachten können.
Nur ein einfaches Programm, das einen Durchschnitt ermittelt.
Ich werde dies als Demonstration verwenden.
Sie liest lediglich drei Ganzzahlen ein, speichert sie und berechnet dann ihren Durchschnitt.
Bevor wir den Debugger verwenden, möchte ich noch etwas erwähnen: Sie müssen sicherstellen, dass
Ihre Konfiguration korrekt eingerichtet ist.
Ich habe bereits in einem früheren Video darüber gesprochen, wie man Code Light für die Verwendung des Debuggers konfiguriert.
Aber nur um Ihr Gedächtnis aufzufrischen: Sie können das Projekt hier auswählen, mit der rechten Maustaste klicken und zu den Einstellungen
gehen.
Je nachdem, auf welcher Plattform Sie sich befinden, sollten Sie sicherstellen, dass die Debugger-Einstellungen
hier auf der linken Seite den richtigen Pfad zu GDB enthalten.
Wenn Sie unter Windows arbeiten, kann das bedeuten, dass Sie GDB X von Cygwin verwenden, oder dass Sie MinGW w64 verwenden, was auch immer Sie zum Laufen
gebracht haben.
Unter Unix und Linux muss dieser Pfad nicht einmal unbedingt angegeben werden.
Die andere wichtige Sache ist in den Compiler-Optionen, die Sie sicherstellen möchten, dass Sie
für das Debugging kompilieren, so dass Dash G Zwerg auf Dash o für die Optimierung ist.
Auch unter Windows müssen diese Einstellungen vorgenommen werden, um Debugging-Informationen zusammen mit Ihrer ausführbaren
Datei zu erhalten.
Sie müssen auch sicherstellen, dass Sie für den Debug-Modus bauen.
Sie müssen also sicherstellen, dass "Debug" und nicht "Release" ausgewählt ist.
Wenn Sie all diese Dinge richtig konfiguriert haben, sollten Sie in der Lage sein, den Debugger und Code Light zu verwenden.
Wenn Sie damit Probleme haben, gehen Sie bitte zurück zu meinem Video für die Konfiguration auf Ihrer Plattform.
Der Debugger und Code Light.
Das wichtigste Konzept im Zusammenhang mit dem Debugger ist die Idee des Haltepunkts.
Ein Haltepunkt ist also etwas, das Sie in Ihrem Programm setzen können, um die Ausführung Ihres Codes anzuhalten.
Sie können im Wesentlichen sagen: Hey, ich möchte bei dieser Zeile anhalten, und
Ihr Programm, wenn Sie den Debugger ausführen, wird bei dieser Zeile anhalten.
Damit können Sie Ihren Code Zeile für Zeile durchgehen und versuchen, eventuelle Probleme zu diagnostizieren und
zu beheben.
Wenn Sie Ihr Programm im Debugger ausführen und keinen Haltepunkt gesetzt haben, wird normalerweise
nichts passieren.
Wenn Sie also normalerweise ein Projekt erstellen, können Sie es wie jedes andere Projekt auch
erstellen, indem Sie auf "Erstellen" gehen und das Projekt erstellen.
Wenn Sie das Programm erstellen und im Debug-Modus ausführen, müssen Sie die Menüoption Debugger aufrufen
und auf Start, Debugger fortsetzen gehen.
Wenn Sie das Programm erneut ausführen und einen Haltepunkt gesetzt haben, wird dieser erreicht.
Wenn Sie keinen Haltepunkt gesetzt haben, wird er einfach ausgeführt.
Wenn wir also versuchen, dieses Programm im Debug-Modus auszuführen, erscheint es einfach und fragt nach der Eingabetaste, weil
es direkt bei den Zahlen stehen bleibt, und dann drückt man einfach ein paar Zahlen ein und es schließt sich einfach.
Es druckt die Informationen nicht einmal aus, richtig?
Es ist also sehr wichtig, dass Sie mindestens einen Haltepunkt gesetzt haben, wenn Sie den Debugger verwenden wollen.
Am einfachsten setzen Sie einen Haltepunkt, indem Sie innerhalb des Randes bei den Zeilennummern auf die Zeilennummer klicken, in der Sie
den Haltepunkt setzen wollen.
Und wieder wird ein Haltepunkt die Ausführung in dieser Zeilennummer anhalten.
Wenn wir also einen Haltepunkt direkt bei der printf-Funktion in Zeile zehn setzen, doppelklicken wir einfach, und Sie werden sehen,
dass ein roter Kreis eingefügt wird.
Damit wird dem Debugger mitgeteilt: "Hey, halt in Zeile zehn an.
Also noch einmal, die Art und Weise, wie wir den Debugger starten, ist, dass wir zum Debugger gehen und sagen: "Start, Continue", richtig?
Alles andere ist irgendwie ausgegraut, richtig?
Starten wir also einfach den Debugger, um den Haltepunkt zu erreichen.
Starten wir also den Debugger, sagen wir Build und Debug, und Sie werden feststellen,
dass das Programm in Zeile zehn anhält.
Sie sehen den grünen Pfeil. Sie sehen auch, dass das Debugger-Fenster angezeigt wird.
Wenn Sie also auf Ansicht gehen, können Sie das Debugger-Fenster manuell
aufrufen oder es wird automatisch angezeigt, wenn Sie in den Debugging-Modus wechseln.
Sie können auch durch den Debugger gehen Sie zu GDB-Fenster, können Sie sehen, alle, die überprüft
werden.
Es gibt viele Debugger-Fenster, die Sie sich ansehen können.
Lokale Variablen haben also in der Regel mit den Uhren vor Ort zu tun.
Sie können eine Variable mit einer Beobachtungsfunktion versehen, so dass sie bei einer Änderung der Variable angezeigt wird.
Die Ausgabe ist für verschiedene Debugging-Optionen und Ausgabe-Threads gedacht.
Sie können die Threads, in denen Ihr Programm läuft, tatsächlich einsehen.
Das fortgeschrittenere Konzept Callstack ist das, worauf wir uns konzentrieren.
Wir sehen uns im Wesentlichen den Aufrufstapel und die lokalen Elemente an.
Das sind die beiden wichtigsten, die Ihnen bei der Fehlersuche helfen, und dann der Speicher und die Haltepunkte.
Sie können sehen, wo die Haltepunkte gesetzt sind.
Es gibt also viele verschiedene Möglichkeiten.
Wir sind derzeit bei Zeile zehn stehen geblieben.
Wir können uns den Aufrufstapel ansehen.
Der Aufrufstapel zeigt uns, dass die Hauptfunktion aufgerufen wird.
Wenn wir uns Locals ansehen, sehen wir drei Variablen, Null, Eins und Null.
Wir haben noch keine Informationen in die Felder eingegeben, die mit Null Eins und Null initialisiert sind.
Die Uhr können Sie tatsächlich hinzufügen.
Durch Drücken des Pluszeichens fügen Sie eine Beobachtung für eine bestimmte Variable hinzu.
Ein weiterer wichtiger Punkt ist, dass Sie im Debug-Modus die Symbolleiste für
den Debugger haben, richtig?
Die Wiedergabetaste wird einfach fortgesetzt.
So wird es gehen.
Wenn ich auf Play drücke, wird das Programm einfach beendet, richtig?
Er wird einfach loslaufen.
Das Programm fragt tatsächlich nach einer Eingabe.
Ich drücke also auf Play.
Ich gehe zurück zur Konsolenanwendung und sie sagt Enter.
Ich habe also meine drei Zahlen in den Programmläufen getroffen.
Dann haben Sie die Druckfunktion immer noch nicht gesehen.
Das Fenster ist einfach verschwunden.
Wir laufen also wieder im Debug-Modus und gehen wieder zum Haltepunkt, das Debugger-Fenster öffnet sich und hält
Zeile zehn an.
Die Symbolleiste ist wichtig, denn so können Sie Ihren Code Schritt für Schritt durchgehen, und
Sie können die Symbolleiste verwenden oder zum Debugger gehen und sich alle Optionen hier oben ansehen.
Sie können also sagen, step into step into instruction next, next instruction, step out, step into geht innerhalb
einer Funktion.
Wenn in dieser Zeile eine Funktion aufgerufen wird, geht die Anweisung step into eher in Richtung
Assembler.
Als Nächstes werden wir diese Codezeile überspringen.
Und die Nackenschulung ist in etwa dasselbe.
Step out, versucht, aus einer Funktion herauszuspringen, wenn man sich bereits in einer befindet, und zur Karottenlinie zu springen.
Ich glaube, das geht auf den Cursor.
Das Gleiche gilt für den Lauf zur Karottenlinie.
Sie können Haltepunkte ein- und ausschalten, alle deaktivieren und so weiter, so dass Sie über das Menü darauf zugreifen
können.
Oder wieder die Symbolleiste.
Normalerweise verwende ich die Symbolleiste, weil sie bereits vorhanden ist.
Und wenn Sie sich die verschiedenen Fenster noch einmal ansehen, sehen Sie den lokalen Aufrufstapel und die Haltepunkte.
Die wirklich wichtigen.
Dies sagt, dass ich einen Haltepunkt in Zeile zehn habe.
Und dann, glaube ich, sagt man einfach den Cursor.
Jetzt habe ich hier bei print F enter in Zeile zehn aufgehört.
Ich kann zur nächsten Anweisung übergehen, und diese wird bis zur Zeile 11 scannen.
F ist eigentlich eine blockierende Funktion, die eine Eingabe verlangt.
Wenn ich also versuche, hier weiterzugehen, hält es einfach an.
Es kann sein, dass Sie mehrmals auf next drücken müssen.
Was ich normalerweise mache, wenn das Programm nach einer Eingabe fragt und ich möchte, dass es bereits blockiert ist, dass es bereits angehalten wurde und ich
möchte, dass es zum nächsten Schritt übergeht.
Ich setze einfach einen Haltepunkt in der nächsten Zeile und drücke die Abspieltaste.
Jetzt drücke ich auf die Wiedergabetaste und nichts passiert, weil es auf eine Eingabe wartet.
Im Programm heißt es Enter.
Hier kann ich also fünf, sechs, sieben drücken, die Eingabetaste drücken und schon ist der Haltepunkt erreicht.
Jetzt sind wir also bei der Schaltfläche "Drucken", wo wir die Druckfunktion aufrufen können.
Und tatsächlich springt es zuerst zur Durchschnittsfunktion.
Wenn wir also sagen, wir gehen in, sehen wir, dass wir zur Durchschnittsfunktion gehen.
Wenn Sie sich Ihre Variablen ansehen, werden Sie feststellen, dass sich die Variablen ändern.
Wenn Sie also "next" wählen, gehen Sie zur nächsten Zeile in 27, dann 28 und dann weiter.
Als Nächstes springen Sie heraus und befinden sich tatsächlich am Ende der Funktion.
Dann können Sie auf "Play" drücken und sehen, dass Ihr Programm jetzt abgeschlossen ist und das Fenster verschwunden ist.
Aber Sie können sich Ihre Variablen ansehen, Sie können sich alles andere ansehen.
Sie können also auch hier einen Haltepunkt innerhalb der Druckfunktion setzen.
Und wenn wir dazu übergehen, können wir wieder sehen, dass die Druckfunktion die Ausführung anstelle des Durchschnitts
stoppt.
Und dann können wir sehen, was in der tatsächlichen Anwendung passiert, wenn wir zur Anwendung
gehen, können Sie sehen, dass die Informationen ausgedruckt wurden.
Richtig?
Wenn Sie fortfahren, wenn Sie bis zum Ende laufen, erhalten Sie die Return-Anweisung und das Programm wird beendet.
Wenn Sie also die Ausgabe des Programms sehen wollen, ist es wichtig, dass Sie einen Haltepunkt
vor der Rückkehr setzen, damit Sie nicht fortfahren müssen.
Sie können den Debugger anhalten, indem Sie auf das rote Rechteck klicken, den Debugger pausieren, indem Sie auf die beiden parallelen
Balken klicken, und den Debugger mit dieser Option und dem Aufrufstapel neu starten.
Auch hier ist es einfacher zu sehen, wenn Sie in eine Funktion einsteigen und den Debugger ausführen, wir führen den Debugger
erneut aus.
Sagen Sie Debugger, Start, Weiter.
Und wenn wir nach der Eingabe von Informationen innerhalb einer Funktion auf den Haltepunkt stoßen, sehen Sie, dass der Autostapel
die Haupt- und die Druckfunktion enthält, wie wir es zuvor gezeigt haben.
Sie können also die letzte Funktion sehen, die aufgerufen wurde. Bei einem Programm mit vielen Funktionen usw.
kann der Aufrufstapel viel größer werden als hier.
Die einzige andere Sache, die wichtig sein könnte, sind die Haltepunkte.
Wenn Sie sehen wollen, welche Haltepunkte Sie gesetzt haben, werden Ihnen alle Haltepunkte und Ihr gesamtes Programm angezeigt,
wo sie sich befinden.
Aber Sie müssen damit herumspielen, sich damit vertraut machen, sich damit anfreunden und es oft für Probleme verwenden,
die Sie mit einfachen Debugging-Techniken oder Programmen nicht lösen können.
Crash geht Zeile für Zeile.
Wenn Sie Zeile für Zeile vorgehen, können Sie sehen, wie das Programm beendet wird, wenn es abstürzt, und
Sie wissen, in welcher Zeile das passiert ist.
Auch hier handelt es sich um ein kleines Programm, aber Sie sollten ein grundlegendes Verständnis dafür bekommen, wie das Debugging funktioniert.
Auch hier hoffe ich, dass dies hilfreich war.
Der beste Weg, diese Dinge zu lernen, ist, mit ihnen zu spielen und sie zu benutzen.
Rufen Sie eines der Programme auf, an denen Sie in Ihrer vorherigen Herausforderung gearbeitet haben.
Fügen Sie einen Haltepunkt hinzu, ganz einfach.
Klicken Sie einfach mit der rechten Maustaste in das Objekt, um Haltepunkte hinzuzufügen.
Starten Sie es im Debug-Modus und gehen Sie jede Zeile durch, um zu sehen, wie sich die Variablen ändern und wie der
Aufrufstapel wächst.
Wenn Sie größere Aufgaben haben.
Ich danke Ihnen.