Der Bereich Source Code zeigt den Source Code für die Methode, die im Schrittmodus durchlaufen wird.
- Ist die Methode zu lang für den angezeigten Textbereich, können Sie nach oben und unten scrollen.
- Bewegen Sie den Mauszeiger auf einen bewertbaren Ausdruck (Datenfeld, Variable, Zeiger, Array,...), erscheint ein Hilfetext (Tool Tip), der den aktuellen Wert des Objekts oder Ausdrucks und den zugewiesenen Typ anzeigt.
Hier ein Beispiel des Bereich Source Code:
![](../../picture/21157/pict21157.de.png)
Ein Hilfetext erscheint, da der Mauszeiger Über die Variable pTable gezogen wurde. Er zeigt an, dass die Variable ein Zeiger auf die Tabelle [Customers] ist.
Tipp: Klicken Sie im Bereich Source Code auf einen bewertbaren Ausdruck, wird der Ausdruck oder das Objekt in den Bereich individuelle Überprüfung kopiert.
- Sie können im Bereich, der den Code in der Ausführung anzeigt, auch einen Teil des Textes auswählen. Setzen Sie den Cursor über den ausgewählten Text, zeigt ein Tipp den Wert des ausgewählten Objekts an:
![](../../picture/21158/pict21158.de.png)
Klicken Sie auf einen Variablen- oder Feldnamen, wird er automatisch ausgewählt.
Tipp: Sie können auch einen beliebigen ausgewählten Ausdruck - der bewertbar ist - aus dem Bereich Source Code in den Bereich individuelle Überprüfung kopieren. Es gibt folgende Möglichkeiten:
- Sie verwenden Drag-and-Drop (Klicken Sie auf den ausgewählten Text und ziehen ihn in den Bewertungsbereich)
- Sie betätigen unter Windows die Tastenkombination ctrl+D, auf Macintosh die Tastenkombination Befehlstaste+D .
Ein gelber Pfeil am linken Rand des Bereichs Source Code (siehe oben) markiert die Zeile, die als nächstes ausgeführt wird. Das ist der Programmzähler. Er gibt immer an, welche Zeile als nächste ausgeführt wird.
Sie können den Programmzähler bei der Fehlersuche für die Methode verschieben, die gerade ausgeführt wird, also auf der obersten Ebene der Aufrufsfolge liegt.
WARNUNG: Nutzen Sie dieses Feature mit Vorsicht!
Das Vorwärtsstellen des Programmzählers bedeutet NICHT, dass der Debugger die übersprungenen Zeilen schneller ausführt. Genausowenig bedeutet das Zurücksetzen des Programmzählers, dass der Debugger die Auswirkung der bereits ausgeführten Zeilen rückgängig macht.
Das Bewegen des Programmzählers bedeutet lediglich, dass der Debugger ab hier mit dem Schrittmodus fortfahren soll. Alle aktuellen Einstellungen, Datenfelder, Variablen usw. sind davon nicht betroffen.
Hier ein Beispiel. Wir gehen von folgendem Code aus:
If(This condition)
DO SOMETHING
Else
DO SOMETHING ELSE
End if
Der Programmzähler wird vor die Zeile If (This condition) gesetzt. Sie gehen einen Schritt, der Programmzähler wird nun vor die Zeile DO SOMETHING ELSE gesetzt. Das ist unglücklich, denn Sie wollten auch die andere Alternative ausführen. Führt der Ausdruck This condition keine Operationen aus, die die nächsten Schritte Ihrer Überprüfung beeinflussen, können Sie den Programmierzähler auf die Zeile DO SOMETHING zurücksetzen, um diesen Teil im Schrittmodus zu durchlaufen.
Während der Fehlersuche müssen Sie manchmal den Schrittmodus für einige Teile des Code überspringen. Der Debugger bietet mehrere Möglichkeiten, den Code bis zu einem gewissen Punkt auszuführen:
- Sie können beim Durchlaufen im Schrittmodus auf die Schaltfläche Step Over anstatt auf Step Into klicken. Das ist sinnvoll, wenn Sie in evtl. vorhandene Unterroutinen oder Funkionen gehen wollen, die innerhalb einer Programmierzeile aufgerufen werden.
- Sind Sie versehentlich in eine Unterroutine gegangen, können Sie diese ausführen und gelangen durch Anklicken der Schaltfläche Step Out direkt zurück in die aufrufende Methode.
- Haben Sie an irgendeiner Stelle einen Aufruf TRACE eingebaut und Sie klicken auf die Schaltfläche Weiter, wird die Ausführung bis zu diesem Aufruf fortgeführt.
Sie führen beispielsweise folgenden Code aus. Der Programmzähler steht vor der Zeile ALL RECORDS([ThisTable]):
Sie möchten den Wert von $vrResult prüfen, nachdem die For-Schleife abgeschlossen ist. Da es jedoch eine geraume Zeit dauert, bis Sie diesen Punkt in Ihrem Code erreichen, wollen Sie die akuelle Ausführung abbrechen, um in der Methode vor der Zeile If ($vrResult... einen Aufruf TRACE einzufügen.
Eine Möglichkeit wäre, die Schleife zu durchlaufen. Enthält die Tabelle [ThisTable] jedoch hunderte von Datensätzen, dauert das einen ganzen Tag. Für solche Fälle bietet der Debugger Unterbrechungspunkte. Sie setzen Unterbrechungspunkte, wenn Sie in den linken Rand des Bereichs Source Code klicken.
Zum Beispiel:
Sie klicken in Höhe der Zeile If ($vrResult... in den linken Rand des Bereichs Source Code:
![](../../picture/21159/pict21159.de.png)
Neben dieser Zeile wird ein Unterbrechungspunkt gesetzt. Er erscheint als roter Punkt. Klicken Sie auf die Schaltfläche Weiter.
Die normale Ausführung läuft nun bis zu diesem Unterbrechungspunkt. Die markierte Zeile wird nicht ausgeführt—Sie sind wieder im Schrittmodus. In diesem Beispiel wurde folglich die gesamte Schleife normal ausgeführt. Sobald der Unterbrechungspunkt erreicht wird, müssen Sie lediglich die Maustaste über $vrResult ziehen, um den Wert am Endpunkt der Schleife zu prüfen.
Setzen Sie einen Unterbrechungspunkt außerhalb des Programmzählers und klicken Sie auf die Schaltfläche Weiter, können Sie Teile der Methode überspringen, die im Schrittmodus durchlaufen wird.
Hinweis: Sie können Unterbrechungspunkte auch direkt im 4D Methodeneditor setzen. Weitere Informationen dazu finden Sie im Abschnitt Unterbrechungspunkte.
Ein roter Unterbrechungspunkt ist ein ständiger Unterbrechungspunkt. Er bleibt, sobald er angelegt wurde und das selbst dann, wenn Sie die Datenbank verlassen und später wieder öffnen.
Es gibt zwei Möglichkeiten, ständige Unterbrechungspunkte zu entfernen:
- Haben Sie den Unterbrechungspunkt bearbeitet, klicken Sie auf den roten Punkt, um ihn zu entfernen — der Unterbrechungspunkt verschwindet.
- Haben Sie den Unterbrechungspunkt nicht vollständig bearbeitet, wollen ihn also noch weiter behalten, können Sie ihn vorübergehend deaktivieren. Weitere Informationen dazu finden Sie im Abschnitt Unterbrechungspunkte.
Das Kontextmenü des Bereich Source Code bietet Zugriff zu verschiedenen Funktionen, die beim Ausführen von Methoden im Schrittmodus hilfreich sind:
![](../../picture/863301/pict863301.de.png)
- Gehe zu Definition: Geht an die Stelle, wo das ausgewählte Objekt
definiert ist. Dieser Befehl ist für folgende Objekte verfügbar:
- Projektmethoden: Zeigt den Methodeninhalt in einem neuen Fenster des Methodeneditors
- Felder: Zeigt Feldeigenschaften im Inspektor des Strukturfensters
- Tabellen: Zeigt Tabelleneigenschaften im Inspektor des Strukturfensters
- Formulare: Zeigt Formulare im Formulareditor
- Variablen (lokal, Prozess, Interprozess oder Parameter $n): Zeigt die Zeile in der aktuellen Methode oder in den Compiler-Methoden, wo die Variable deklariert wurde.
- Suche Referenzen (auch im Methodeneditor verfügbar): Sucht alle Datenbankobjekte (Methoden und Formulare), auf die sich das aktuelle Element der Methode bezieht. Das aktuelle Element ist das markierte bzw. das, wo der Cursor steht. Es kann der Name eines Feldes, Befehls, Strings, einer Variablen, etc. sein. Suchergebnisse erscheinen in einem neuen Standard Ergebnisfenster.
- Weiter bis Cursor: Führt Anweisungen aus, die zwischen dem Programmzähler (gelber Pfeil) und der ausgewählten Linie der Methode liegen, d.h. wo der Cursor steht.
- Setze nächste Ausführungszeile: Bewegt den Programmzähler zur ausgewählten Zeile, ohne diese oder dazwischenliegende Zeilen auszuführen. Die angegebene Zeile wird nur ausgeführt, wenn der Benutzer auf eine der Ausführungsschaltflächen klickt.
- Unterbrechungspunkt umschalten (auch im Methodeneditor verfügbar): Fügt den Unterbrechungspunkt für die ausgewählte Zeile hinzu oder entfernt ihn. Dies ändert den Unterbrechungspunkt dauerhaft: Entfernen Sie z.B. einen Unterbrechungspunkt im Debugger, erscheint er nicht mehr in der ursprünglichen Methode.
- Unterbrechungspunkt bearbeiten (auch im Methodeneditor verfügbar): Öffnet das Dialogfenster Unterbrechungspunkt Eigenschaften. Alle hier gewählte Optionen verändern den Unterbrechungspunkt dauerhaft.