Debugger Watchpoint

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

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

DebuggerNew8.jpg

Zuerst setzt man den Cursor im Debugger auf eine Variable und drückt auf die Schaltfläche DebuggerNew1.jpg. Standardmäßig wird hier das Stoppen des Programmablaufs bei einer Änderung der Variablen vorgeschlagen.

DebuggerNew2.jpg

Bei einem Variablenwert stoppen

Will man bei einem bestimmten Variablenwert den Programmablauf stoppen, so drückt man auf die Schaltfläche DebuggerNew3.jpg und gibt den gewünschten Variablenwert ein mit einem führenden "= ".

DebuggerNew4.jpg

Es erfolgt nach ENTER eine Bestätigung über den angelegten Watchpoint.

DebuggerNew5.jpg

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.

DebuggerNew6.jpg

Zeigt man sich die Variable an, sieht man, dass der gewünschte Variablenwert existiert.

DebuggerNew7.jpg

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

 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