
ABAP Tools - Arbeiten mit Eclipse (Breakpoint)
Wie helfen dir Breakpoints in den ABAP Development Tools effizienter zu debuggen? Schauen wir uns die verschiedenen Arten an und was du damit erreichen kannst.
Inhaltsverzeichnis
In diesem Artikel schauen wir uns einmal die verschiedenen Breakpoints an und wie du sie für deine tägliche Arbeit effizient nutzen kannst.
Einleitung
Wenn du noch die SE80 als Entwicklungsumgebung kennst, dort gab es zwei verschiedene Arten von Breakpoints. Der normal Breakpoint und ein externer Breakpoint. In den meisten Fällen wirst du mit dem normalen Breakpoint gearbeitet haben, um Reports und anderes Coding zu debuggen. Die erfahrenen Entwickler nutzen auch Watchpoints, wenn sie nicht genau wussten, wo der Fehler eigentlich auftritt. Mit ADT gibt es nun weitere Arten von Breakpoints und Möglichkeiten zur Analyse, die wir uns einmal in diesem Artikel anschauen.
Vorbereitung
Zur Vorbereitung verwenden wir dabei eine Klasse zum Debuggen, die wir bereits in unserem YouTube Video verwendet haben. Möchtest du mehr zum Debuggen für Anfänger erfahren, dann findest du das Video unten verlinkt. Grundsätzlich kannst du mit der Klasse starten, wenn du gerade ein eigenes Objekt zur Hand hast. Fehlen dir weitere Objekt, dann findest du sie im Repository auf GitHub.
CLASS zcl_bs_ytb_debug_example DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
TYPES: BEGIN OF sale,
position TYPE i,
description TYPE string,
value TYPE p LENGTH 15 DECIMALS 2,
currency TYPE waers,
END OF sale.
TYPES sales TYPE STANDARD TABLE OF sale WITH EMPTY KEY.
PRIVATE SECTION.
METHODS get_table_content
RETURNING VALUE(result) TYPE sales.
METHODS raise_a_stacked_exception.
METHODS raise_and_add_message
RAISING zcx_bs_ytb_general_failure.
METHODS raise_an_optional_error
RAISING zcx_bs_ytb_general_failure.
METHODS get_json_content
RETURNING VALUE(result) TYPE string.
ENDCLASS.
CLASS zcl_bs_ytb_debug_example IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA(table_content) = get_table_content( ).
out->write( table_content ).
TRY.
raise_a_stacked_exception( ).
CATCH cx_root INTO DATA(error).
out->write( error->get_text( ) ).
ENDTRY.
DATA(json_string) = get_json_content( ).
out->write( json_string ).
ENDMETHOD.
METHOD get_table_content.
RETURN VALUE #( ( position = 1 description = `Ben's computer` value = '100.00' currency = 'USD' )
( position = 2 description = `On little chair` value = '20.99' currency = 'EUR' )
( position = 3 description = `A dishwasher` value = '250.00' currency = 'EUR' )
( position = 4 description = `Used old car` value = '1250.00' currency = 'USD' ) ).
ENDMETHOD.
METHOD raise_a_stacked_exception.
TRY.
raise_and_add_message( ).
CATCH zcx_bs_ytb_general_failure INTO DATA(failure).
RAISE EXCEPTION NEW cx_sy_itab_line_not_found( previous = failure ).
ENDTRY.
ENDMETHOD.
METHOD raise_and_add_message.
TRY.
raise_an_optional_error( ).
CATCH zcx_bs_ytb_general_failure INTO DATA(failure).
RAISE EXCEPTION NEW zcx_bs_ytb_general_failure( textid = zcx_bs_ytb_general_failure=>message_specific
previous = failure ).
ENDTRY.
ENDMETHOD.
METHOD raise_an_optional_error.
DATA(raise_error) = abap_false.
IF raise_error = abap_true.
RAISE EXCEPTION NEW zcx_bs_ytb_general_failure( ).
ENDIF.
ENDMETHOD.
METHOD get_json_content.
RETURN `{ "Name": "Gerd", "Age": 10, "Child": True }`.
ENDMETHOD.
ENDCLASS.
Breakpoints
Einen Breakpoint kannst du am einfachsten setzen, wenn du vor dem Quellcode auf die Zeilennummer einen Rechtsklick machst. mit den ersten beiden Optionen kannst du die verschiedenen Breakpoints umschalten. Unter "Debug Properties..." findest du weitere Einstellungen, die aber auch systemabhängig sind und wir später benötigen.
Breakpoint
Der normale Breakpoint wird blau dargestellt und funktioniert wie ein normaler Breakpoint. Sobald das Coding durchlaufen wird, wird der Debugger geöffnet und du kannst mit dem Debuggen beginnen.
Diese Art von Breakpoint ist auch gleichzeitig ein externer Breakpoint. Auch bei RFC und HTTP Aufrufen wird damit der Breakpoint durchlaufen. Bei Standardeinstellung wird das Debugging für den aktuellen User durchgeführt. Über die Debug Properties (siehe oben), kannst du auch auf einen anderen User einstellen oder ein bestimmtes Terminal.
Soft Breakpoint
Der Soft Breakpoint ist eine ganz spezielle Form von Breakpoint. In der IDE wird er als grüner Punkt dargestellt. Ist der Debugger nicht aktiv, werden alle Soft Breakpoint ignoriert und der Debugger startet nicht. Ist der Debugger aktiv und du springst über diese Art Breakpoint, dann funktioniert er ganz normal.
Damit eignet sich der Breakpoint perfekt, wenn du größere Strecken debuggen willst, aber über einen Einstiegspunkt das Debugging bestimmen möchtest.
Breakpoint View
Über den "Breakpoints (Debug)" View bekommst du eine Information über alle Breakpoints, die auf allen offenen Systemen gesetzt sind.
Spezifisch
Spezifische Breakpoints kannst du über das Menü erstellen. So zum Beispiel, wenn du immer anhalten möchtest, wenn ein bestimmtes Statement ausgelöst wird oder eine bestimmte Meldung erzeugt wird. Ebenso kannst du an spezifische Ausnahmen anhalten, wenn du diese in der Liste suchst.
Optionen
Klickst du einen Breakpoint in der Liste an, dann findest du weitere Einstellungen im unteren Bereich des Views. So kannst du zum Beispiel zwischen einem normalen und einem Soft Breakpoint wechseln oder eine Kondition definieren. Wird der Breakpoint erreicht und die Kondition trifft zu, dann wird angehalten. Die Kondition kannst du auch mit einem Watchpoint vergleichen
Fazit
Die ABAP Development Tools bieten zusätzliche Optionen zum Debuggen von Quellcode, als es noch die SE80 machte. Da immer mehr Anwendungen auf Stateless und HTTP Kommunikation setzen, ist es auch wichtig, dass diese Anwendungen leicht debugbar bleiben.
Weitere Informationen:
YouTube - ABAP Tools - Debugging for Beginners






