
Vielleicht wurden Sie beim Debugging auch schon mit folgender Situation konfrontiert: Um an die Stelle eines vermuteteten Problems zu gelangen, müssen Sie wiederholt eine Meldung bestätigen, einen Return-Code setzen oder eine sonstige ständig wiederkehrende Aufgabe im Debugger ausführen, um fortzufahren.
Das Scripting im neuen ABAP Debugger ist ideal dafür geeignet, solche rekursiven Aufgaben schnell zu automatisieren. Mit dem Scripting des ABAP Debugger können Sie alle manuell im Debugger ausführbaren Aktivitäten automatisieren.
Angenommen, Ihre Anwendung prüft beim Hochfahren alle Partnersysteme - aber die notwendige Konfiguration fehlt in Ihrem Testsystem. Wie können Sie über diese Schleife hinausgelangen, ohne zuerst eine unbekannte Anzahl an Meldungen bestätigen zu müssen?
Im Folgenden sehen Sie, wie der Anwendungsquelltext an der Stelle aussehen könnte, an der die Meldungen ausgegeben werden:
...
LOOP AT lt_remote_systems ASSIGNING <rs>.
l_rc = check_remote_system( SYSTEM = <rs> ).
IF l_rc = ABAP_FALSE.
MESSAGE i000(msg_id) WITH 'Application APP is inactive on system' 'SID'.
ENDIF.
ENDLOOP.
...
Sie können die Meldungen mit folgendem Script überspringen. Das Script nutzt zwei Funktionen, die Sie aus den Abschnitten Debugger-Kontrolle und Variableninformation des Script Wizard einfügen können.
Um das Script zu nutzen, würden Sie es an einem Breakpoint anstoßen, der beim Aufruf der Methode CHECK_REMOTE_SYSTEM gesetzt ist.
Das Script führt dann Folgendes aus:
Mit einem Aufruf der Methode DEBUG_STEP aus dem Script Wizard heraus führt das Script die Methode CHECK_REMOTE_SYSTEM aus.
Mit einem Aufruf der Methode CHANGE_VALUE wird die Variable L_RC zurückgesetzt, so dass keine Warnmeldung erscheint.
Sie benötigen im Debugger die Berechtigung zur Änderung von Werten, damit dieses Script lauffähig ist.
Mit Hilfe des Scripts können Sie alle Informationsmeldungen überspringen, die in der Schleife ausgegeben werden, und bei einem späteren Breakpoint im Quelltext anhalten.
CLASS lcl_debugger_script IMPLEMENTATION.
METHOD script.
* First use a method from the Control section of the
* Script Wizard to run the check_remote_system method.
*************************************************
* debugger commands (p_command):
* Step into(F5) -> CL_TPDA_SCRIPT_DEBUGGER_CTRL=>DEBUG_STEP_INTO
* Execute(F6) -> CL_TPDA_SCRIPT_DEBUGGER_CTRL=>DEBUG_STEP_OVER
* Return(F7) -> CL_TPDA_SCRIPT_DEBUGGER_CTRL=>DEBUG_STEP_OUT
* Continue(F8) -> CL_TPDA_SCRIPT_DEBUGGER_CTRL=>DEBUG_CONTINUE
*************************************************
*Interface (CLASS = CL_TPDA_SCRIPT_DEBUGGER_CTRL / METHOD = DEBUG_STEP )
*Importing
* REFERENCE( P_COMMAND ) TYPE I
**************************************************
debugger_controller->debug_step(
p_command = cl_tpda_script_debugger_ctrl=>debug_step_over ).
* Then change the value of l_rc using a function
* from the Change Variable Value section
* of the Script Wizard.
***************************************************
*Interface (CLASS = CL_TPDA_SCRIPT_DATA_DESCR / METHOD = CHANGE_VALUE )
*Importing
* REFERENCE( P_NEW_VALUE ) TYPE STRING
* REFERENCE( P_OFFSET ) TYPE I
* REFERENCE( P_LENGTH ) TYPE I
* REFERENCE( P_VARNAME ) TYPE STRING
****************************************************
cl_tpda_script_data_descr=>change_value(
p_new_value = ABAP_TRUE
p_varname = 'L_RC'.
ENDMETHOD. "end
ENDCLASS. "lcl_debugger_script IMPLEMENTATION