Show TOC

Interaktive Scripts anlegenLocate this document in the navigation structure

Technisch gesehen stellt ein Script im neuen ABAP Debugger eine normale lokal definierte Klasse in der Debugging-Sitzung dar.

Sie sind daher nicht auf die Methodenaufrufe beschränkt, die von der ABAP-Debugging-Schnittstelle auf der Registerkarte Script Wizard angeboten werden. Sie können nahezu alle von ABAP gebotenen Funktionen nutzen, die Ihnen normalerweise zur Verfügung stünden.

Das folgende Script zeigt, dass Sie in der Verwendung der Standard-ABAP-Funktionen völlig frei sind. Das Script verwendet den Standardfunktionsbaustein POPUP_GET_VALUES, um den Namen eines Programms zu holen.

Wenn Sie das Script bei jedem Auslösen des Breakpoint bei 'ABAP-Stack-Änderung' ausführen lassen, passiert Folgendes:

  1. Das Script fragt in der Methode INIT ein Mal nach dem Namen eines ABAP-Programms.

  2. Es prüft bei jedem Breakpoint bei einer ABAP-Stack-Änderung, ob Sie sich im Kontext des angegegeben Programms befinden (das Programm wurde gestartet oder Sie sind im Debugger ins Programm zurückgekehrt).

    Der Programmname wird vom Attribut PROGRAM des Objekts ABAP_SOURCE geliefert. ABAP_SOURCE wird durch die Scripting-Infrastruktur instanziiert und erlaubt beschreibenden Zugriff auf das Programm, das debuggt wird. Sie können ABAP_SOURCE-Attribute und Methoden aus dem Abschnitt Quellcodeinformation des Script Wizard einfügen.

  3. Das Script stoppt die Ausführung und übergibt die Steuerung im Debugger an Sie zurück, wenn Sie das angegebene Programm erreicht haben.

Sie können das komplette Script samt Fehlerbehandlung in der Transaktion SAS sehen. In der Transaktion SAS wählen Sie die Registerkarte Script-Editor . Wählen Sie dann Script laden , um das Script RSTPDA_SCRIPT_PROGRAM_REACHED anzuzeigen.

Sie können den Breakpoint bei der ABAP-Stack-Änderung im neuen ABAP Debugger setzen. Wählen Sie Anfang des Navigationspfads Breakpoints Nächster Navigationsschritt Breakpoint bei Nächster Navigationsschritt Breakpoint bei Stackänderung /Sonstiges Ende des Navigationspfads.

*---------------------------------------------------------------------*
*       CLASS lcl_debugger_script DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_debugger_script DEFINITION INHERITING FROM  cl_tpda_script_class_super  .

  PUBLIC SECTION.
    METHODS: init    REDEFINITION,
             script  REDEFINITION,
             end     REDEFINITION.
  PRIVATE SECTION.
    DATA program TYPE sy-repid.

ENDCLASS.                    "lcl_debugger_script DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_debugger_script IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_debugger_script IMPLEMENTATION.

  METHOD init.
    DATA:           l_dd03p_tab TYPE TABLE OF dd03p,
                    l_key       TYPE abap_keydescr,
                    l_fields    TYPE TABLE OF sval,
                    l_field     TYPE sval,
                    l_rc(1) TYPE c.

*(1) get oref name
    l_field-tabname   = 'TPDA_DYNP_SRC_INFO'.
    l_field-fieldname = 'PROGRAM'.
    l_field-fieldtext = 'Programm'(prg).
    l_field-value      =      space.
    l_field-field_obl = abap_true.
    APPEND l_field TO l_fields.

    CALL FUNCTION 'POPUP_GET_VALUES'
      EXPORTING
        popup_title     = 'Halte bei Programm'(hd1)
      IMPORTING
        returncode      = l_rc
      TABLES
        fields          = l_fields
      EXCEPTIONS
        error_in_fields = 1
        OTHERS          = 2.

    READ TABLE l_fields INTO l_field INDEX 1.
    program = l_field-value.

  ENDMETHOD.                    "init

  METHOD script.

* Get the name of the current program using 
* a standard Script Wizard function. Compare it
* to the program name collected from the user. 
* Break if the program names match.
    DATA l_program TYPE sy-repid.

    IF program = abap_source->program( ).
       me->break( ).
    ENDIF.
  ENDMETHOD.                    "script
ENDCLASS.                    "lcl_debugger_script IMPLEMENTATION