Debugger-Konzept

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.


Funktionen zur Kontrolle über die Natural-Sitzung

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 (Spies)

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:

Verwaltung und Validierung der Debug-Einträge

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 Environment Maintenance (Verwaltung der Debug-Umgebung).

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.

Namen von Debug-Einträgen

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.

Anfangszustand oder aktueller Zustand

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).

Zähler für Debug-Ereignisse

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.

Kommandos für Debug-Einträge

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.

Debug Break-Fenster

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 Sourcecode-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
Go G Fortsetzung der Programmausführung, bis zum nächsten angebenen Debug-Eintrag.
List break L Auflistung des Sourcecode des zurzeit aktiven Natural-Objekts. Das zuletzt ausgeführte Statement ist hervorgehoben.
Debug Main Menu M 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.
Next break command N Ausführung des nächsten Kommandos, das für den aktuellen Breakpoint oder Watchpoint angegeben ist.
Run (set test mode OFF) R Fortsetzung der Ausführung des Natural-Objekts mit ausgeschaltetem Test-Modus.
Step mode S Fortsetzung der Ausführung des Natural-Objekts im Step-Modus (Einzelschritt-Modus).
Variable maintenance V Anzeige der Variablen in dem zurzeit aktiven Natural-Objekt und Änderung des Inhalts dieser Variablen.