jQT-
Debuggen im Borland C++ Builder
|
Einige einleitende Worte Nun aber genug geplaudert, gehen
wirs an! |
Grundsätzliches |
|
Wo finde ich die Werkzeuge? | |
Alle Werkzeuge die im zusammenhang mit dem Debuggen stehen befinden sich im C++ Builder im Menü "Start". Eine Auflistung aller Debugbefehle wäre an dieser Stelle unnnütz. Es sind nämlich alle im Menü "Start" stehenden Befehle! |
|
Die C++ Builder IDE stellt über 5 sehr gute Werkzeuge zur Verfügung:
Diese 5 Werkzeuge werden wir uns genauer anschauen. Abgesehen von den IDE-Werkzeugen gibt es in der Softwareentwicklung noch ganz andere Möglichkeiten zum Debuggen. Man darf dabei ruhig etwas kreativ sein und eigene Wege beschreiten. Auch von diesen zum Teil doch recht unkonventionellen Methoden werden wir noch einige streifen. Zunächst lernen wir jetzt allerdings diese 5 Standard-Werkzeuge kennen. |
|
Haltepunkte (Breakpoints) | |
Haltepunkte sind vermutlich die beliebteste Methode eine Software zu debuggen. Wie der Name schon vermuten lässt, ermöglichen Haltepunkte, die Ausführung der Software an einem bestimmten Punkt anzuhalten. Haltepunkte setzt man in der Borland-IDE auf zwei Arten. Entweder über das Menü "Start" oder - was auch wesentlich bequemer ist - mit der Taste F5. Dazu setzt man den Cursor auf die gewünschte Zeile, in der man den Breakpoint (Haltepunkt) haben will und drückt dann eben F5. |
|
Haltepunkte werden im Code durch farbliche Hervorhebung sowie durch zusätzliche Symbole am linken Rand des Editors markiert. Wir unterschieden zwei Arten von Breakpoints: gültige und ungültige. (Vgl. Abb. 1) | |
Ungültig sind Haltepunkte, an denen der Debugger nicht anhalten kann, weil sich in der entsprechenden Zeile kein (passender) Code befindet. Sie werden wie in Abb. 1 dargestellt zur Laufzeit der Software (also nach dem Start) als ungültig markiert. Gültige Haltepunkte sind Haltepunkte, an denen der Debugger die Ausführung der Software unterbrechen kann. Gültige Haltepunkte lassen sich grundsätzlich auf jeder Anweisungszeile und auf jeder Endklammer setzen. Die Frage ist nun wohl, was einem
das Anhalten der Software bringen kann. Es gibt mehrere Gründe die
Software anzuhalten. Meistens möchte man Variablen überwachen
oder den Verlauf einer komplexeren Funktion verfolgen. Für letzteres
gibt es mehrere Wege. Der Einfachheit halber beschränken wir uns
hier aber auf die beiden wichtigsten. |
![]() Abb. 1 |
Bewegen innerhalb eines gestoppten Programms |
![]() Abb. 2 |
Die beiden Möglichkeiten die
ich oben angesprochen habe nenne sich Step In und Step Over oder in Deutsch:
Einzelne Anweisung (F7) und Gesamtroutine (F8). Der unterschied ist folgender:
Step In springt in eine aufgerufene Unterfunktion und geht diese ebenfalls
Step By Step durch. Step Over behandelt einen Funktionsaufruf als eine
einzelne Anweisung. Das Bewegen allein ist ja noch nicht
wirklich spannend, wenn man eine Software debuggen will. Vorallem lässt
sich damit der korrekte Ablauf einer Funktion noch nicht nachweisen. Immerhin
beeinflussen oft die verschiedensten Variablen den Verlauf einer Funktion.
Deshalb bietet die-BCB IDE die Möglichkeit an, den Inhalt einer Variablen
zur Laufzeit anzuschauen. |
Variablen überwachen | |
Mit einem Rechtsklick in dieses Fenster kann man mit "Ausdruck hinzufügen" einen beliebigen Ausdruck eingeben. Idealerweise Variablen. Belässt man den Variablentyp auf Vorgabe (meistens ist diese Einstellung empfehlenswert) so findet das Fenster automatisch das richtige Format um den Variablenhinhalt darzustellen. Manchmal (z.B. bei einer char-Variablen) kann es interessant sein, den Hex-Wert zu wissen. Dann kann man die Darstellungsart mit Hilfe des Radiobuttons bequem ändern. Auch die zu überwachende Variable lässt sich hier (nachträglich) noch ändern, z.B. von "Memo1->Text" nach "Memo1->Lines->Strings[0]". Einzelne Variablen lassen sich leicht in die Liste der überwachten Ausdrücke aufnehmen, indem man den Curser in den Variablennamen setzt und dann STRG + F5 drückt. In diesem Fenster kann man mit einfachen Mitteln relativ viele Variablen gleichzeitig überblicken, was gerade bei komplexeren Funktionen sehr von Interesse sein kann. |
|
Auswerten/Ändern | |
|
Gerade beim Debuggen
von Schleifen kann das Durchsteppen unter Umständen mühsam
werden. Vor Allem dann, wenn zum Beispiel eine Schleife eine Liste mit
100 Elementen verarbeitet und beim 98. Element tritt regelmässig
der Fehler auf. Eine weitere Möglichkeit ist hier das Definieren von Bedingungen für die Haltepunkte. Um beim Beispiel der langen for-Schleife zu bleiben: for
(int i = 0;i < 100;i++) Normalerweise müssten wir hier 97 Mal durch die Schleife steppen, um dann im 98sten Durchgang in die Funktion springen und das Problem untersuchen zu können. Stattdessen setze ich bei der BuggyFunction() einen Haltepunkt und greife mit einem Rechtsklick auf das Symbol links neben der Zeile auf die "Breakpoint poroperties" zu. Dort kann ich (für die Schleife am passendsten) den Passcount auf 98 einstellen, oder in Condition eine Bedingung formulieren, wie z.B. "CheckBox1->Checked" |
Schlusswort | |
So, nun solltest du alle grundlegenden
Mittel welche dir das Debuggen ermöglichen, zumindest vom Namen her
kennen. Ich würde dir unbedingt empfehlen, nun etwas mit der C++
Builder IDE zu "spielen". Nimm ein bestehendes Projekt oder
erstelle eigens für deine Tests ein neues, und probiere die verschiedenen
Werkzeuge aus, die dir die IDE zur Verfügung stellt. Nur wenn du
etwas herumexperimentierst und die unterschiedlichen Optionen ausprobierst,
wirst du merken, welche Power in der IDE steckt. |