Debugger Watchpoint
Oft ist es sehr nützlich dem Debugger mitzuteilen, dass die Codingzeile aufgerufen werden soll, wenn eine Variable einen bestimmten Inhalt hat oder seinen Wert verändert. Dies ist über einen "Watchpoint" möglich.
Watchpoint anlegen im Debugger
Zuerst setzt man den Cursor im Debugger auf eine Variable und drückt auf die Schaltfläche . Standardmäßig wird hier das Stoppen des Programmablaufs bei einer Änderung der Variablen vorgeschlagen.
Bei einem Variablenwert stoppen
Will man bei einem bestimmten Variablenwert den Programmablauf stoppen, so drückt man auf die Schaltfläche und gibt den gewünschten Variablenwert ein mit einem führenden "= ".
Es erfolgt nach ENTER eine Bestätigung über den angelegten Watchpoint.
Debugger stoppt bei Watchpoint
Wird das Programm nun mit F8 ausgefährt, stoppt das Programm, wenn die Bedingung des Watchpoints erfüllt wurde. Der Cursor steht genau eine Zeile nach dem Füllen der Variablen. Wurde die Variable als letzter Befehl in einer Unterroutine (Methode, Form-Routine, Funktionsbaustein) gefüllt, steht der Cursor auf dem nächsten Befehl nach der Unterroutine.
Zeigt man sich die Variable an, sieht man, dass der gewünschte Variablenwert existiert.
Möchte man, dass der Debugger bei jeder Variablenänderung stoppt, dann legt man lediglich den Watchpoint für eine Variable an und lässt die Bedingung und weitere Optionsfelder unausgefüllt.
Watchpoint bei SY-SUBRC
- Oft ist es ganz interessant zu wissen, wann der Returncode SY-SUBRC ungleich 0 ist.
- Variable SY-SUBRC
- Bedingung "<> SY-SUBRC"
Watchpoints und Feldsymbole
- Watchpoint sind bei Feldsymbole (Field-Symbols) nicht möglich. Man kann sich damit behelfen für das Feldsymbol eine Variable anzulegen und den Watchpoint dann auf die Variable zu setzen.
- eine Alternative ist es ein Debugger-Script anzulegen und im Debugger-Script eine Variable anzulegen und dieser Variable das Feld-Symbolzuzweisen. Siehe ABAP Objects: Das neue umfassende Handbuch zu Konzepten, Sprachelementen und Werkzeugen in ABAP OO, 2016, von Felix Roth (Amazon) oder Rheinwerk, Kap. 15.2.3
- In diesem Beispiel ist das Feldsystem "<fs_itab>-connid'" und der Debugger soll beim Wert "0026" halten.
METHOD script. DATA: lv_value TYPE string. TRY. CALL METHOD cl_tpda_script_data_descr=>get_simple_value EXPORTING p_var_name = '<fs_itab>-connid' RECEIVING p_var_value = lv_value. CATCH cx_tpda_varname. CATCH cx_tpda_script_no_simple_type. ENDTRY. IF lv_value = '0026'. me->break( ). "Wert trifft zu, halte an ENDIF. ENDMETHOD. "script
Literatur
- ABAP Workbench - 100 Tipps & Tricks, von Christian Assig, S. 267 ff.