Watchpoints verwalten - Menü: Watchpoint Maintenance

Ein Watchpoint ist ein Haltepunkt, bei dem die Ausführung eines Natural-Objekts immer dann unterbrochen wird, wenn sich der Wert einer Variablen ändert.

Darüber hinaus können Sie die Unterbrechung, so wie im Abschnitt Watchpoint-Operatoren beschrieben, von einer Bedingung mit Bezug zu einem spezifischen Variablenwert abhängig machen (siehe auch Watchpoint setzen weiter unten).

Durch die Verwendung von Watchpoints können Sie unbeabsichtigte Änderungen von Variablen entdecken, die durch Fehler enthaltende Objekte verursacht werden.

Eine Variable gilt als geändert, wenn sich ihr aktueller Wert entweder von dem Wert unterscheidet, der beim letzten Auslösen des Watchpoints aufgezeichnet wurde, oder wenn er sich vom Anfangswert unterscheidet. Die vergleichende Validierung von Watchpoint-Werten ist auf eine Feldlänge von 253 Byte beschränkt. Bei großen Variablen, die die die maximale Länge überschreiten, werden nur die ersten 253 Bytes für den Vergleich herangezogen.

Die Definition eines Watchpoint erfolgt durch Angabe des Namens des Natural-Objekts und des Namens der betreffenden Variablen.

Der eindeutige Bezeichner für einen Watchpoint ist die vom Debugger vergebene Spy-Nummer.

Sobald ein Watchpoint festgelegt wurde, bleibt er für die gesamte Sitzung festgelegt, es sei denn, Sie löschen ihn.

Beginn der AnweisungslisteUm die Funktion zur Verwaltung der Watchpoints aufzurufen:

  • Geben Sie im Hauptmenü Debug Main Menu den Funktionscode W ein.

    Oder:
    Geben Sie folgendes Direktkommando ein:

    WM

    Das Menü Watchpoint Maintenance erscheint.

Dieses Kapitel beschreibt die im Menü Watchpoint Maintenance zur Verfügung stehenden Funktionen und die in einem Watchpoint-Bildschirm vorhandenen Felder und Spalten.


Test-Modus ON/OFF setzen

Siehe Abschnitt Test-Modus ein- und ausschalten.

Watchpoint aktivieren

Beginn der Anweisungsliste Um den aktuellen Zustand angegebener Watchpoints auf aktiv zu setzen:

  • Geben Sie im Menü Watchpoint Maintenance den Funktionscode A, einen Objektnamen und/oder einen Variablennamen ein.

    Oder:
    Benutzen Sie das Direktkommando ACTIVATE. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

Wenn Sie kein Objekt oder keine Variable angeben (oder den standardmäßig vorhandenen Stern (*) im Feld Variable lassen), werden alle Watchpoints aktiviert.

Watchpoint deaktivieren

Beginn der Anweisungsliste Um den aktuellen Zustand angegebener Watchpoints auf inaktiv zu setzen:

  • Geben Sie im Menü Watchpoint Maintenance den Funktionscode B, einen Objektnamen und/oder einen Variablennamen ein.

    Oder:
    Benutzen Sie das Direktkommando DEACTIVATE. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

Wenn Sie kein Objekt oder keine Variable angeben (oder den standardmäßig vorhandenen Stern (*) im Feld Variable lassen), werden alle Watchpoints deaktiviert.

Watchpoint löschen

Beginn der Anweisungsliste Um einen Watchpoint zu löschen:

  • Geben Sie im Menü Watchpoint Maintenance den Funktionscode C, einen Objektnamen und/oder einen Variablennamen ein.

    Oder:
    Benutzen Sie das Direktkommando DELETE. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

Wenn Sie kein Objekt oder keine Variable angeben (oder den standardmäßig vorhandenen Stern (*) im Feld Variable lassen), werden alle Watchpoints gelöscht.

Watchpoint anzeigen

Beginn der AnweisungslisteUm einen Watchpoint anzuzeigen:

  1. Geben Sie im Menü Watchpoint Maintenance den Funktionscode D, einen Objektnamen und/oder einen Variablennamen ein. Wenn Sie keinen Objektnamen eingeben, wird das Standard-Objekt (falls angegeben) verwendet.

    Oder:
    Benutzen Sie das Direktkommando DISPLAY. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

    Wenn für das angegebene Objekt und den Variablennamen ein Watchpoint gesetzt worden ist, erscheint der Bildschirm Display Watchpoint mit allen Watchpoint-Definitionen, zum Beispiel:

    10:25:32              ***** NATURAL TEST UTILITIES *****             2006-02-14
    Test Mode ON                - Display Watchpoint -              Object
    
    Spy number ..............  12
    Initial state ........... active         Current state .. active
    Watchpoint name ......... WATCHTEST1     DBID/FNR ....... 10/32
    Object name ............. WATCHPGM       Library ........ SAG
    Variable name ........... WATCHVARIABLE
    Skips before execution ..     0          Format/length .. A 10
    Max number executions ...     0          Persistent ..... N   Act.level ...  0
    Number of activations ...     0
    Error in definition ..... - none -
    
    Commands ... BREAK
    
    
    
    
    
    
    
    Command ===>
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help        Exit  Last  Mod   Flip                    Alpha Hex   Canc

    Die Felder im Bildschirm Display Watchpoint sind im Abschnitt Felder und Spalten in Watchpoint-Bildschirmen beschrieben.

    Wird kein eindeutiger Watchpoint gefunden, dann erscheint der Bildschirm List Watchpoints (siehe unten).

  2. Im Bildschirm Display Watchpoint können Sie sich die mit dem Watchpoint-Operator angegebene Bedingung für die Watchpoint-Aktivierung ansehen (siehe auch Watchpoint-Operatoren):

    Drücken Sie PF10 (Alpha), um den Operator und/oder den Operandenwert in alphanumerischem Format anzuzeigen.

    Oder:
    Drücken Sie PF11 (Hex), um den Operator und/oder den Operandenwert in hexadezimalem Format anzuzeigen.

    Sie können PF22 (Cmds) drücken, um zur Standardansicht des Bildschirms Display Watchpoint zurückzukehren. Dort befindet sich das Eingabefeld Commands.

Beginn der AnweisungslisteUm Watchpoints aufzulisten:

  • Geben Sie im Menü Watchpoint Maintenance den Funktionscode D, einen Objektnamen und/oder einen Variablennamen ein. Sie können Stern-Notation (*) benutzen, um einen Bereich von Objektnamen und/oder Variablennamen anzugeben, zum Beispiel: ABC*. Wenn Sie nur einen Stern (*) eingeben, werden alle Namen ausgewählt. Wenn Sie keinen Objektnamen angeben, wird das Standard-Objekt (falls angegeben) benutzt.

    Oder:
    Benutzen Sie das Direktkommando DISPLAY. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

    Der Bildschirm List Watchpoints erscheint (s. Beispiel). Er enthält eine Liste aller Watchpoints, die für das oder die angegebenen Objekte oder den Variablennamen gesetzt wurden:

    10:14:05              ***** NATURAL TEST UTILITIES *****             2006-02-14
    Test Mode ON                 - List Watchpoints -               Object
                                                                        Top of data
    Co No. WP Name      Library  Object    DBID   FNR Stat Skips Execs Count P E
           *___________ *_______ *_______             I  C
           *_______________________________________________________________________
    __   1 NAME         SAG      DEBPGM      10    32 A  A     0     0     0 N
           EMPLOYEES-VIEW.NAME
    __   5 #MAKE        SAG      DEBPGM      10    32 A  A     0     0     0 N
           #MAKE
    __  10 LEAVE-DUE    SAG      DEBPGM      10    32 A  A     0     0     0 N
           EMPLOYEES-VIEW.LEAVE-DUE
    __  11 WATCHTEST2   SAG      DEBPGM      10    32 A  A     0     0     0 N
           TESTWP
    __  12 WATCHTEST1   SAG      WATCHPGM    10    32 A  A     0     0     0 N
           WATCHVARIABLE
    __  13 WATCHTEST3   SAG      DEBPGM      10    32 A  A     0     0     0 N
           WPTEST
    
    
    
    Command ===>
    Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12---
          Help        Exit  Last        Flip  -     +                       Canc

    Die Liste ist in aufsteigender Reihenfolge nach den Spy-Nummern in der Spalte No. sortiert.

    Informationen zu den Spalten im Bildschirm List Watchpoints und zu den Zeilenkommandos, die bei einem Listeneintrag ausgeführt werden können, siehe Felder und Spalten in Watchpoint-Bildschirmen.

Watchpoint ändern

Beginn der Anweisungsliste Um einen Watchpoint zu ändern:

  1. Geben Sie im Menü Watchpoint Maintenance den Funktionscode M, einen Objektnamen und einen Variablennamen ein. Wenn Sie keinen Objektnamen eingeben, wird das Standard-Objekt (falls angegeben) verwendet.

    Oder:
    Benutzen Sie das Direktkommando MODIFY. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

    Wenn ein eindeutiger Watchpoint angegeben wurde, erscheint der Bildschirm Modify Watchpoint, in dem Sie die Feldeinträge ändern können. Beschreibung der Felder im Bildschirm Modify Watchpoint siehe Felder und Spalten in Watchpoint-Bildschirmen.

    Wird kein eindeutiger Watchpoint gefunden, dann erscheint der Bildschirm List Watchpoints (siehe Abschnitt Watchpoint anzeigen).

  2. Im Bildschirm Modify Watchpoint können Sie die mit dem Watchpoint-Operator angegebene Bedingung für die Aktivierung eines Watchpoint ändern (siehe auch Watchpoint-Operatoren):

    Drücken Sie PF10 (Alpha), um den Operator und/oder den Operandenwert in alphanumerischem Format zu ändern.

    Oder:
    Drücken Sie PF11 (Hex), um den Operator und/oder den Operandenwert in hexadezimalem Format zu ändern.

    Drücken Sie PF22 (Cmds), um zur Standardansicht des Bildschirms Modify Watchpoint zurückzukehren. Dort befindet sich das Eingabefeld Commands.

  3. Wenn Sie die Bearbeitung der Watchpoint-Definitionen beendet haben, drücken Sie PF3 (Exit) oder PF5 (Save), um die Änderungen zu speichern.

    Wenn Sie PF12 (Canc) drücken, wird die Bearbeitung abgebrochen und der Watchpoint bleibt unverändert.

Watchpoint setzen

Beginn der Anweisungsliste Um einen Watchpoint für eine Sitzung hinzuzufügen:

  • Geben Sie im Menü Watchpoint Maintenance den Funktionscode S, einen Objektnamen und einen Variablennamen ein.

    Oder:
    Benutzen Sie das Direktkommando SET. Syntax-Beschreibung siehe Abschnitt Debug-Kommandoübersicht und -syntax.

    Oder:
    Bevor Sie ein Natural-Objekt ausführen:

    Wenn Sie keinen Objektnamen, aber einen gültigen Variablennamen angeben, wird der Name des Standard-Objekts (siehe Abschnitt Debugger starten) benutzt.

    Falls kein Standard-Objekt angegeben ist, erscheint ein Auswahlfenster, in dem alle in der aktuellen Library enthaltenen Objekte angezeigt werden.

    Wenn die Namen des Objekts und der Variablen korrekt angegeben sind, wird der Watchpoint sofort gesetzt und eine entsprechende Informationsmeldung wird im Bildschirm angezeigt. Ein für eine dynamische Variable oder ein X-Array gesetzter Watchpoint wird nur während der Programmausführung validiert. Weitere Informationen siehe Verwaltung und Validierung der Debug-Einträge.

    Der Watchpoint erhält das Standard-Kommando (BREAK), sein Anfangszustand und sein aktueller Zustand werden auf aktiv gesetzt und es werden keine Ausführungseinschränkungen angegeben. Achtung: Wenn Sie beim Setzen eines Watchpoint das Standardkommando BREAK löschen und kein Kommando eingeben, das einen Dialog öffnet, hat der Debugger keine Möglichkeit, während der Programmunterbrechung die Steuerung zu übernehmen.

Dieses Kapitel behandelt folgende Themen:

Watchpoint-Operatoren

Sie können für die Aktivierung eines Watchpoint eine Bedingung angeben, indem Sie in einem Watchpoint-Verwaltungsbildschirm einen (Vergleichs-)Operator und (falls relevant) einen dazugehörigen Operanden eingeben.

Beginn der Anweisungsliste Um Watchpoint-Operatoren anzugeben:

  1. Drücken Sie im Bildschirm Set Watchpoint oder Modify Watchpoint des gewählten Watchpoint die Funktionstaste PF10 (Alpha), wenn Sie einen Operanden eines Operators in alphanumerischem Format angeben möchten.

    Oder:
    Drücken Sie im Bildschirm Watchpoint setzen oder Modify Watchpoint des gewählten Watchpoint die Funktionstaste PF11 (Hex), wenn Sie einen Operanden eines Operators in hexadezimalem Format angeben möchten.

    In der unteren Bildschirmhälfte erscheinen zwei Eingabefelder.

  2. Im linken Eingabefeld geben Sie einen der Watchpoint-Operatoren ein, die in der folgenden Tabelle aufgelistet sind.

    Im rechten Eingabefeld geben Sie den Operandenwert ein, der mit der Variablen verglichen werden soll. Bei Watchpoints mit Operatoren, die für dynamische Variablen (alphanumerisch oder binär) angegeben sind, werden die Operandenwerte von links nach rechts verglichen. Weil die Feldlänge einer dynamischen Variablen variiert, können Sie bis zu 253 Bytes als Vergleichswert eingeben. Ist die aktuelle Länge der dynamischen Variablen kürzer als die maximale Vergleichswertlänge von 253 Bytes, dann erfolgt der Vergleich nur in der aktuellen Länge der dynamischen Variablen.

    Operator Erklärung
    MOD

    Änderung (Modification).
    Aktiviert den Watchpoint jedes Mal, wenn eine Änderung der Variablen erfolgt.

    Dies ist die Standardeinstellung.

    EQ

    Gleich (Equal to).
    Aktiviert den Watchpoint, wenn die Variable geändert worden ist und wenn der aktuelle Wert der Variablen gleich dem angegebenen Operatorwert ist.

    NE

    Ungleich (Not equal to).
    Aktiviert den Watchpoint, wenn die Variable geändert worden ist und wenn der aktuelle Wert der Variablen nicht gleich dem angegebenen Operatorwert ist.

    GT

    Größer (Greater than).
    Aktiviert den Watchpoint, wenn die Variable geändert worden ist und wenn der aktuelle Wert der Variablen größer als der angegebene Operatorwert ist.

    GE

    Größer gleich (Greater than or equal to).
    Aktiviert den Watchpoint, wenn die Variable geändert worden ist und wenn der aktuelle Wert der Variablen größer als oder gleich dem angegebenen Operatorwert ist.

    LT

    Kleiner (Less than).
    Aktiviert einen Watchpoint, wenn die Variable geändert worden ist und wenn der aktuelle Wert der Variablen kleiner als der angegebene Operatorwert ist.

    LE

    Kleiner gleich (Less than or equal to).
    Aktiviert einen Watchpoint, wenn die Variable geändert worden ist und wenn der aktuelle Wert der Variablen kleiner als oder gleich dem angebenen Operatorwert ist.

    INV

    Ungültiger Inhalt (Invalid contents).
    Aktiviert den Watchpoint jedes Mal, wenn der einer Variablen des Typs N, P, D oder T zugewiesene Wert nicht die folgenden Bedingungen erfüllt:

    N Numerisch, nicht gepackt (Numeric unpacked).
    P Numerisch, gepackt (Packed numeric).
    D Datumsbereich (Date range) von 1582-01-01 bis 2700-12-31.
    T Zeitbereich (Time range) von 1582-01-01 00:00:00.0 bis 2700-12-31 23:59:59.9.

    Sie können PF22 (Cmds) drücken, um zur Standardansicht des Bildschirms Watchpoint setzen bzw. Modify Watchpoint zurückzukehren. Dort befindet sich das Eingabefeld Commands.

  3. Drücken Sie PF5 (Save), um die Operator-Definitionen zu speichern.

    Oder:
    Drücken Sie PF12 (Canc), um die Operator-Definitionen unverändert zu lassen und den Bildschirm Modify Watchpoint zu verlassen.

Felder und Spalten in Watchpoint-Bildschirmen

Die folgende Tabelle enthält die Beschreibungen der Felder in den Bildschirmen Display Watchpoint und Modify Watchpoint und der Spalten im Bildschirm List Watchpoint:

Feld Spalte Erläuterung
Test Mode    Gibt an, ob der Test-Modus auf ON oder OFF gesetzt ist.
Object    Zeigt den Namen des Standard-Objekts (siehe Debugger starten), falls angegeben.
   Co Feld zur Eingabe eines der folgenden Zeilenkommandos:
Kommando Aktion
AC Watchpoint aktivieren
DA Watchpoint deaktivieren
DI Watchpoint anzeigen
MO Watchpoint ändern
DE Watchpoint löschen
? Gültige Zeilenkommandos auflisten
. Watchpoint-Bildschirm verlassen
Spy number No. Eine eindeutige Nummer, die vom Debugger beim Setzen des Watchpoint zugewiesen wird.
Initial state Stat I Gibt den Anfangszustand (Initial) und den aktuellen Zustand (Current) des Watchpoint an: Aktiv (A) oder Inaktiv (I) an.
Current state Stat C
Watchpoint name WP Name Der Name des Watchpoint.

Der Standard-Name für einen Watchpoint ist der Name der betroffenen Variablen.

Gültige Werte: 1 bis 12 Zeichen. Namen, deren Länge die Feldgröße übersteigt, werden nach 12 Zeichen abgeschnitten.

Im Bildschirm List Watchpoints wird der Name des Watchpoint in der ersten Zeile über dem Namen der Variablen aufgelistet.

DBID/FNR DBID Die Datenbankkennung (DBID) und die Dateinummer (FNR) der Systemdatei, in der das Natural-Objekt gespeichert ist.
FNR
Library Library Der Name der Library, die das Objekt enthält.
Object name Object Der Name des Objekts, das in der aktuellen Library oder in einer ihrer Steplibs verfügbar ist.

Wenn Sie eine Systemvariable als Watchpoint angeben möchten, geben Sie im Feld Object name einen Stern (*) ein.

Variable name   Der Name einer Benutzervariablen, einer globalen Variablen oder einer Systemvariablen.

Wenn die Variable Teil einer Gruppe ist, kann sie den Gruppennamen als Präfix haben.

Wenn Sie eine Systemvariable angeben möchten, geben Sie im Feld Object name einen Stern (*) ein.

Für ein Array muss eine Indexbeschreibung angegeben werden (Watchpoints können nur für einzelne Elemente definiert werden.)

Im Bildschirm List Watchpoints wird der Variablenname in der zweiten Zeile, unterhalb dem Watchpoint-Namen aufgelistet.

Weitere Informationen siehe Variablen verwalten - Funktion: Variable Maintenance.

Skips before execution Skips Legt fest, dass der Watchpoint erst ausgeführt wird, wenn die für den Watchpoint gesetzte Bedingung erfüllt ist (siehe auch Watchpoint-Operatoren).

Gültige Werte: 0 (Standardwert) bis 32767.

Max number executions Execs Ein beliebiger Wert größer als Null (0) legt die maximale Anzahl der Watchpoint-Ausführungen fest.

Gültige Werte: 0 (Standardwert) bis 32767.

Number of activations Count Gibt an, wie viele Male die Watchpoint-Bedingung entsprechend der Angabe beim Watchpoint-Operator erfüllt wurde.

Der Zähler wird zurückgesetzt, wenn das Programm auf Level 1 gestartet wird.

Format/length   Das Natural-Datenformat und die Datenlänge der Variablen, z.B. A10.
Persistent P Kennzeichnet einen Watchpoint als persistent. Persistente Watchpoints sind nicht auf das Natural-Objekt beschränkt, für das sie definiert sind, sondern gelten zusätzlich für alle untergeordneten Programmebenen.

Persistente Watchpoints sind nur sinnvoll bei Variablen, die BY REFERENCE und nicht BY VALUE RESULT an ein Subprogramm übergeben werden, siehe relevante Parameterbeschreibung des CALLNAT-Statement im Abschnitt Parameter - operand2, in der Statements-Dokumentation.

Einschränkung: Persistente Watchpoints sind nicht erlaubt bei Variablen, die in einer Parameter-Kontextklausel definiert sind.

Gültiger Wert: Y (Yes) oder N (No). N ist der Standardwert.

Act. level   Bezieht sich auf Persistent.

Zeigt die Programmebene an, auf der ein persistenter Watchpoint automatisch aktiviert wurde.

Error in definition E Zeigt eine ungültige Watchpoint-Definition an.

Dieser Fehler kann auftreten, wenn das ausführende Programm während des Debugging-Vorgangs neu katalogisiert wird, nachdem die betreffende Variablendefinition geändert wurde.

Ein Watchpoint, der für eine dynamische Variable oder ein X-Array (eXtensible array = erweiterbares Array) gesetzt ist, wird nur während der Programmausführung auf Gültigkeit geprüft.

Commands   Bis zu sechs Debug-Kommandos.

Geben Sie jeweils ein Kommando pro Zeile ein. Eine Zusammenfassung der zur Verfügung stehenden Kommandos finden Sie im Abschnitt Debug-Kommandoübersicht und -syntax.

Vorsicht:
Wenn Sie das Kommando BREAK löschen und kein Kommando eingeben, das einen Dialog öffnet, hat der Debugger keine Möglichkeit, während der Programmunterbrechung die Kontrolle zu erhalten.