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.
Um 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.
Siehe Abschnitt Test-Modus ein- und ausschalten.
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.
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.
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.
Um einen Watchpoint anzuzeigen:
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).
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.
Um 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.
Um einen Watchpoint zu ändern:
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).
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.
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.
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:
Rufen Sie den Bildschirm List Object Source auf (siehe Objekt-Quellcode anzeigen - Funktion: List Object Source).
Positionieren Sie in der Spalte Source den Cursor auf einem Variablennamen und drücken Sie PF18 (Se Wp).
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:
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.
Um Watchpoint-Operatoren anzugeben:
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.
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). Dies ist die Standardeinstellung. |
||||||||
EQ |
Gleich (Equal to). |
||||||||
NE |
Ungleich (Not equal to). |
||||||||
GT |
Größer (Greater than). |
||||||||
GE |
Größer gleich (Greater than or equal
to). |
||||||||
LT |
Kleiner (Less than). |
||||||||
LE |
Kleiner gleich (Less than or equal
to). |
||||||||
INV |
Ungültiger Inhalt (Invalid
contents).
|
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.
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.
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:
|
|||||||||||||||||
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: |
||||||||||||||||
Max number executions | Execs | Ein beliebiger Wert größer als Null (0 )
legt die maximale Anzahl der Watchpoint-Ausführungen fest.
Gültige Werte: |
||||||||||||||||
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 Einschränkung: Persistente Watchpoints sind nicht erlaubt bei Variablen, die in einer Parameter-Kontextklausel definiert sind. Gültiger Wert: |
||||||||||||||||
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: |