Watchpoints im Abap Debugger
Lesezeit ca. 3 Minuten
Breakpoints sind ein sehr geläufiges und sehr nützliches Werkzeug um Abap-Systeme zu Debuggen. Es gibt aber Situationen, in denen ihre Anwendung nicht sinnvoll funktioniert. Beispiele dafür sind Schleifen, in denen extrem viele Daten verarbeitet werden, man sich aber nur für einen bestimmten Schleifendurchlauf interessiert. Ein anderes Beispiel sind Reports, in denen nicht bekannt ist, wann und wo eine Variable gefüllt wird. Dies kann zum Beispiel bei Forms, die sehr oft aufgerufen werden, der Fall sein, aber auch bei statischen und globalen Variablen und Parametern. In diesen Fällen wäre es viel schöner, wenn der Debugger eine Variable für uns beobachten würde und sobald die Variable mit einem bestimmten Wert gefüllt wird, hält er an. Wir müssen dafür nicht genau wissen wo die Variable geändert wird, außerdem sparen wir sinnvolle Zeit für stupides F8-klicken in Schleifen.
Watchpoints
Wie schon gesagt halten Watchpoints nicht an einer bestimmten Stelle im Programm an, sondern wenn sich der Inhalt einer vorher definierten Variable ändert. Der Watchpoint kann dabei an eine Bedingung geknüpft werden, z.B. der Inhalt der Variable muss 500 sein. Der Watchpoint hält in genau dem Moment an, an dem diese Variable – nennen wir sie lv_value – der Wert 500 zugewiesen wird.
In diesem Beispiel möchten wir anhalten, sobald lv_value = 500 gilt. Dafür setzen wir einen Breakpoint unmittelbar vor die Schleife und führen den Report aus. Anschließend erstellen wir einen Watchpoint mittels der markierten Schaltfläche.
Anschließend geben wir in die Maske die zu beobachtende Variable ein und unten eine Bedingung, in unserem Fall lv_value = 500. Würde die Bedingung weggelassen, würde der Debugger bei jeder Änderung der Variable, also insgesamt 1000 mal, anhalten.
Nach dem Bestätigen der Eingabe und einem Klick auf F8, springt der Debugger an die Stelle, an der die Variable mit 500 gefüllt wird:
Fazit
Wie schon das im letzten Blogeintrag von mir gezeigte „Teilschritte Debuggen“, sind Watchpoints keine Wundermittel, können in bestimmten Situationen aber sehr sinnvoll sein. Die prominentesten Beispiele sind statische oder globale Variablen in sehr großen Programmen oder Klassen sowie lokale Variablen die in Schleifen geändert werden. Watchpoints sind dabei nicht ansatzweise so fehleranfällig wie Breakpoints, da die Überwachung der Variable vom Debugger übernommen wird. Das macht Watchpoints außerdem zu einer sehr schnellen Methode zum gewünschten Programmpunkt zu springen.