Show TOC

WatchpointsLocate this document in the navigation structure

Vorgehensweise

Kurzzusammenfassung

Watchpoints bieten die Möglichkeit den Inhalt einzelner Variablen zu überwachen.

Der Debugger hält an sobald sich der Wert der überwachte Variable ändert.

Zusätzlich können noch Bedingungen angegeben werden. Der Debugger prüft dann zusätzlich ob diese Bedingung erfüllt ist.

Detailbeschreibung

Anlegen eines Watchpoints

In der Toolbar des Neuen Debugger findet sich die Schaltfläche "Watchpoint anlegen" die zum Popup "Watchpoint anlegen führt".

Im Rahmen "Watchpoint" kann die zu überwachende Variable eingegeben werden. Es sind hier alle denkbaren ABAP Datenstrukturen erlaubt. ---------------------------------------------------------------------------------------------------------------------------------

Sonderfall Watchpoint auf interne Tabelle:

Das Setzen eines Watchpoints auf eine Interne Tabelle ist u.U. mit Performance-Einbußen bei der Laufzeit des Programms und mit erhöhtem Speicherverbauch zu rechnen.

Grund dafür ist, dass für den Watchpoint auf eine Tabelle (wie für jeden anderen Watchpoint auch) ein "Clone" des ursprünglichen Datenobjektes angelegt wird. Ist die Tabelle, auf die der Watchpoints gesetzt wurde sehr groß, so muss berücksichtigt werden, dass der "Clone" dieselbe Größe haben wird. Bei sehr großen Internen Tabellen kann dies zu Speicherengpässen führen.

In einigen Fällen kann es daher ratsam sein, Watchpoints auf Interne Tabellen nur für kurze Programmstrecken aktiv zu haben.

Tipp:

In denjenigen Fällen, in denen man nur an der Änderung der Anzahl der

Zeilen der Internen Tabelle interessiert ist, kann man alternativ wie

folgt vorgehen:

Setzen eines Watchpoints auf den Header der Internen Tabelle, z.B.

"*ITAB[]" eventuell mit der Bedingung:

Ungleichheit der aktuellen Zeilenzahl, z.B.: "LINES( ITAB ) <> 1000"

---------------------------------------------------------------------------------------------------------------------------------

Beim Anlegen eines Watchpoints wird diejenige Variable als Vorschlagswert für die Watchpointvariable verwendet, auf die der Cursor (im Editor oder in anderen Werkzeugen) gerade zeigt. Es können nur Watchpoints auf Variablen des aktuellen Kontextes (Programm) gesetzt werden.

Für lokale Variablen kann spezifiziert werden, ob der Watchpoint nur für die aktuelle Prozedurinstanz oder für alle Instanzen dieser Prozedur, die jemals gerufen werden, gelten soll. Insbesondere bei rekursiven Aufrufen der Prozedur kann dieser Unterschied wichtig sein.

Zusätzlich kann eine freie Bedingung im Folgerahmen "Bedingung" eingegeben werden. Nur falls sich die Watchpoint-Variable ändert UND die Bedingung erfüllt ist, hält der Debugger dann an.

Die Bedingung muss folgender Syntax genügen:

<Funktion(Variable) oder Variable>

Operator

<Funktion(Variable) oder Variable oder Konstante>

Hierbei sind folgende Funktionen verfügbar: (Die Syntax ist identisch zur ABAP Syntax)

Für interne Tabellen( z.B. interne Tabelle ITAB):

o LINES( ITAB ) - Zahl der Tabellenzeilen

Für Strings( z.B. String S):

o STRLEN( S ) - Aktuelle Länge des Strings

Beispiele für erlaubte Bedingungen

  • sy-index > 5

  • sy-index = sy-tabix

    • lines( itab ) > 0

    • lines( itab ) <> sy-tabix

    • lines( itab ) < lines( itab )

    • strlen( s ) >= sy-index

Watchpoint wird erreicht

Nach Anlegen des Watchpoints wird der Wert der Variable überwacht.

Sobald nach einem Debug-Schritt eine Änderung bzgl. des Inhalts der Variable festgestellt wird und die eventuell vorhandene Bedingung erfüllt ist, hält der Debugger an und man erhält die Meldung "Watchpoint wurde erreicht (<Watchpointvariable>)".

Im Werkzeug "Breakpoints" (Desktop Break-/Watchpoints) / Reiter Watchpoints) kann nun dieser erreichte Watchpoint im Detail betrachtet werden.

Der erreichte Watchpoint ist durch einen gelben Pfeil markiert.

Es stehen der alte Wert und der aktuelle Wert der Watchpointvariable zur Verfügung.

Außerdem kann über die Schaltfläche "Variablen vergleichen" ) die Unterschiede zwischen der alten und aktuellen Variable bestimmt werden.

Zusätzlich können in dieser Sicht die Watchpoint gepflegt, also geändert, aktiviert, deaktiviert und gelöscht werden.

Geltungsbereich von Watchpoints

Watchpoints gelten nur in der aktuellen Debugger-Sitzung und gehen nach Beendigung der Debuggers verloren. Innerhalb einer Debugger-Sitzung sind Watchpoints nur im aktuell prozessierten internen Modus gültig. Wenn sich der interne Modus ändert, werden alle Watchpoints unsichtbar. Sie werden wieder sichtbar, wenn Sie den internen Modus wieder aktivieren. Watchpoints, die im neuen Debugger angelegt wurden, können nicht im klassischen Debugger verwendet werden und umgekehrt.