Der Debugger übernimmt die Kontrolle über eine Natural-Sitzung zu Debugging-Zwecken, während ein Natural-Objekt ausgeführt wird. Dies ermöglicht es Ihnen, den Verarbeitungsablauf eines Programms zu verfolgen und verschiedene Programmuntersuchungen durchzuführen.
Sie können in einem Programm Stellen angeben, an denen der Debugger anhalten soll, indem Sie für das betreffende Programm Debug-Einträge (Breakpoints oder Watchpoints) setzen.
Wenn die Programmausführung pausiert, können Sie den Inhalt der im Programm verwendeten Variablen oder Parameter überprüfen, um die Programmlogik zu analysieren, oder Sie können den Grund für einen Natural-Fehler ermitteln.
In den folgenden Abschnitten finden Sie Informationen über die Funktionen, die im Debugger zur Verfügungs stehen.
Der Debugger enthält die Kontrolle über eine Natural-Sitzung, wenn
der Test-Modus auf ON
gesetzt ist (siehe
Test-Modus ein- und
ausschalten). Ist der Natural-Profilparameter
DBGERR
auf ON
gesetzt, wird der Debugger aufgerufen, wenn ein
Natural-Fehler auftritt, und zwar unabhängig davon, ob Debug-Einträge vorhanden
sind oder ob der Test-Modus auf ON
oder OFF
gesetzt
ist
Wenn der Debugger die Kontrolle über eine Sitzung hat, führt er eine oder mehrere der folgenden Funktionen aus:
Er prüft die Debug-Einträge.
Er unterbricht ein Natural-Objekt an der Statement-Zeile, für die ein Breakpoint gesetzt wurde.
Er unterbricht ein Natural-Objekt, wenn sich der Wert einer Variablen, für die ein Watchpoint gesetzt wurde, geändert hat.
Er zeigt Informationen zu den gefundenen Debug-Einträgen (Watchpoint und/oder Breakpoint) an.
Er liefert Statistiken zu den aufgerufenen Natural-Objekten.
Er liefert Statistiken zu den in einem Natural-Objekt aufgerufenen Statements.
Er unterbricht ein Natural-Objekt, wenn ein Natural-Fehler auftritt. Siehe auch Abschnitt Fehlerbehandlung.
Die folgende Grafik zeigt ein Beispiel für den Ablauf bei der Ausführung eines Objekts mit dem Debugger:
Debug-Einträge werden in der Debugger-Umgebung auch als Spies bezeichnet. Es stehen zwei Arten von Spies zur Verfügung: Breakpoints und Watchpoints.
Folgende Themen werden behandelt:
Debug-Einträge für die aktuelle Debug-Sitzung können mit den entsprechenden Debugger-Maintenance-Funktionen, die in den entsprechenden Abschnitten der Debugger-Dokumentation beschrieben sind, gesetzt, geändert, aufgelistet, angezeigt, aktiviert, deaktiviert und gelöscht werden. Debug-Einträge können auch zur späteren Verwendung gespeichert werden, siehe Abschnitt Debug-Umgebung verwalten - Menü: Debug Environment Maintenance.
Die Validierung von Debug-Einträgen erfolgt entweder sofort bei der Definition eines Breakpoints oder Watchpoints auf dem entsprechenden Maintenance-Bildschirm oder während der Programmausführung.
Falls während der Programmausführung eine Validierung fehlschlägt,
erscheint im Fenster Debug Break die Anmerkung
Check for invalid spy definition
(Auf ungültige
Spy-Definition prüfen), siehe Debug
Break-Fenster. Außerdem wird der ungültige Breakpoint oder
Watchpoint in den relevanten Bildschirmen zur Verwaltung der Breakpoints oder
Watchpoints markiert.
Wird ein Debug-Eintrag gesetzt oder geändert, speichert Natural intern die Library, die Datenbankkennung und die Dateinummer, wo sich das Objekt befindet. Das Objekt kann sich in der aktuellen Library oder in einer ihrer Steplibs befinden. Wird später ein Objekt mit demselben Namen aus einer anderen Library ausgeführt, dann wird der entsprechende Debug-Eintrag nicht ausgeführt.
Der Debugger vergibt für jeden Debug-Eintrag einen Namen und eine eindeutige Nummer (Spy-Nummer). Der einem Debug-Eintrag zugewiesene Name (auch als Spy-Name bezeichnet) kann entweder ein vom Benutzer angegebener Name oder ein Standardname sein, der vom Debugger erstellt wird. Ein Debug-Eintrag kann über seine Nummer mit den entsprechenden Debugger-Kommandos ausgewählt werden. Wenn mehr als ein Debug-Eintrag an einer bestimmten Statement-Zeile ausgeführt werden muss, werden diese in aufsteigender Reihenfolge ihrer Nummern ausgeführt.
Jeder Debug-Eintrag hat einen Anfangszustand und einen aktuellen
Zustand. Mögliche Werte sind A
(aktiv) und I
(inaktiv). Der Anfangswert wird angegeben, wenn Sie den Breakpoint oder
Watchpoint setzen oder ändern. Er bestimmt den Zustand des Debug-Eintrags beim
Start der Umgebung oder nach einem Reset. Während der Debug-Sitzung kann der
Zustand mit den Debug-Kommandos ACTIVATE
und
DEACTIVATE
geändert werden (siehe auch die
Syntax-Diagramme in Debug-Kommandoübersicht und
-syntax).
Jeder Debug-Eintrag hat einen Ereigniszähler, der jedes Mal erhöht wird, wenn der Debug-Eintrag ausgeführt wird. Ein Debug-Eintrag wird nicht ausgeführt, wenn der aktuelle Zustand inaktiv ist. Die Ereignisanzahl des Breakpoint oder Watchpoint wird ebenfalls nicht erhöht.
Die Anzahl der Ausführungen eines Debug-Eintrags kann auf zwei Arten eingeschränkt werden:
Es kann eine Anzahl von Auslassungen angegeben werden, bevor der Debug-Eintrag ausgeführt wird. Der Debug-Eintrag wird dann so lange ignoriert, bis die Ereignisanzahl höher ist als die angegebene Anzahl der Auslassungen.
Es kann eine maximale Anzahl von Ausführungen angegeben werden, so dass der Debug-Eintrag ignoriert wird, sobald die Ereignisanzahl die angegebene Anzahl der Ausführungen überschreitet.
Zu jedem Debug-Eintrag (Breakpoint oder Watchpoint) können bis zu
sechs Debug-Kommandos angegeben werden. Diese Kommandos werden zur
Ausführungszeit des Breakpoint oder Watchpoint ausgeführt. Sie können alle
Debugger-Kommandos verwenden, die während einer Debug-Unterbrechung angewendet
werden können. Das Standardkommando ist das
BREAK
-Kommando, mit dem das Debug
Break-Fenster angezeigt wird. Siehe folgenden Abschnitt
Debug
Break-Fenster.
Vorsicht:
Wenn Sie beim Setzen eines Debug-Eintrags das Kommando
BREAK
löschen und kein Kommando eingeben, das einen
Dialog auslöst, gibt es keine Möglichkeit, die Steuerung während einer
Programmunterbrechung zu übernehmen.
Wenn der Debugger die Kontrolle über eine Sitzung übernimmt, wird ein Debug Break-Fenster angezeigt, zum Beispiel:
+------------------- Debug Break -------------------+ ! Break by breakpoint DEBPGM-ALL ! ! at line 180 in program DEBPGM (level 1) ! ! in library SAG in system file (10,32). ! ! ! ! G Go ! ! L List break ! ! M Debug Main Menu ! ! N Next break command ! ! R Run (set test mode OFF) ! ! S Step mode ! ! V Variable maintenance ! ! ! ! Code .. G ! ! Note: Check for invalid spy definition. ! ! ! ! PF2=Step,PF13=Next,PF14=Go,PF15=Menu,PF17=SkipS ! +---------------------------------------------------+ |
Das Fenster Debug Break zeigt den Typ und den Namen des Debug-Eintrags, der die Unterbrechung verursacht hat (d. h. den Namen des entsprechenden Breakpoint oder Watchpoint), seine Quellcode-Zeilennummer und den Namen des unterbrochenen Natural-Objekts.
Zusätzlich können unten im Debug Break-Fenster Meldungen erscheinen, die entweder einen Natural-Fehler anzeigen (siehe auch Fehler während der Anwendungsausführung in Fehlerbehandlung) und/oder auf die Möglichkeit eines ungültigen Debug-Eintrags hinweisen.
Die Funktionen, die im Fenster Debug Break zur Verfügung stehen, sind in der folgenden Tabelle beschrieben. Weitere Informationen siehe Kommandos zur Ausführungssteuerung.
Funktion | Code | Beschreibung |
---|---|---|
Fortsetzung der Programmausführung, bis zum nächsten angebenen Debug-Eintrag. | ||
Auflistung des Quellcode des zurzeit aktiven Natural-Objekts. Das zuletzt ausgeführte Statement ist hervorgehoben. | ||
Aufruf des Debug Main Menu, in dem Sie alle Funktionen benutzen können, die Sie zur Verwaltung von Debug-Einträgen benötigen, bei denen die Steuerung übernommen werden soll. | ||
Ausführung des nächsten Kommandos, das für den aktuellen Breakpoint oder Watchpoint angegeben ist. | ||
Fortsetzung der Ausführung des Natural-Objekts mit ausgeschaltetem Test-Modus. | ||
Fortsetzung der Ausführung des Natural-Objekts im Step-Modus (Einzelschritt-Modus). | ||
Anzeige der Variablen in dem zurzeit aktiven Natural-Objekt und Änderung des Inhalts dieser Variablen. |