This is a test message to test the length of the message box.
Login
|
ABAP Dump erstellen
Erstellt von Software-Heroes

ABAP - Dump erzeugen

161

Ein Dump in ABAP steht für einen Abbruch im System, weil etwas nicht funktioniert hat oder ein Fehler nicht sauber abgefangen und behandelt wurde. Der Dump ermöglicht aber auch weitere Informationen zur Verfügung zu stellen.

Werbung


In diesem Artikel schauen wir uns an, wie du in deinem Code einen Abbruch erzeugst und wie dieser dir beim Finden der Fehler helfen kann.

 

Einleitung

Ein Dump stellt normalerweise ein schwerwiegendes Problem im System dar, denn eine Programm oder eine Verarbeitung ist abgestürzt, was vielleicht an Fehlern im Code liegt oder an nicht bedachten Fällen im System. Ein Dump erzeugt gleichzeitig ein Log, welches wir auch nutzen können, um Analysen durchzuführen und den Fehler zu finden. In manchen Situationen macht es deshalb Sinn, proaktiv einen Fehler zu erzeugen, um später die Analyse zu vereinfachen oder auf Probleme im System hinzuweisen.

 

Erzeugung

Für die Erzeugung von Dumps gibt es ein Statement, das wir einfach verwenden können. Schauen wir uns dazu zwei verschiedene Use Cases an.

 

Inline

Wollen wir einen Fehler inline erzeugen, können wir das über das Statement RAISE SHORTDUMP tun. Dabei müssen wir eine Exception-Instanz an das Statement übergeben, um den Dump zu erzeugen. In diesem Fall können wir auch inline die Exception generieren, während wir den Dump auslösen wollen. Über das Keyword NEW und den Namen der Exception generieren wir eine neue Instanz und übergeben diese direkt an das Statement. Ab dieser Stelle wird dann auch der Kurzdump erzeugt und das Programm beendet.

RAISE SHORTDUMP NEW cx_sy_zerodivide( ).

 

Exception

Haben wir eine bestehende Exception, können wir diese auch direkt verwenden, um den Kurzdump zu erzeugen und diese ins Protokoll zu übernehmen. Dies macht vor allem Sinn, wenn wir an Stellen kommen, wo wir vielleicht gar nicht mehr reagieren können oder wo es einfach keinen Sinn mehr macht, das Programm weiterlaufen zu lassen. Nehmen wir den einfachen Fall, dass wir zum Beispiel eine neue UUID erzeugen wollen: In diesem Fall ist immer ein TRY/CATCH nötig, um eine Exception abzufangen. Doch sollte diese Exception geworfen und keine UUID erzeugt werden, sollte eigentlich das komplette Programm beendet werden, da hier ein Sichern nicht mehr möglich ist. In so einem Fall können wir dann die abgefangene Exception nehmen und direkt damit einen Kurzdump auslösen.

TRY.
    DATA(new_uuid) = cl_system_uuid=>create_uuid_x16_static( ).

  CATCH cx_uuid_error INTO DATA(error).
    RAISE SHORTDUMP error.
ENDTRY.

 

Neben der UUID könnte ein typischer weiterer Fall sein, wenn wir zum Beispiel ein Application Log schreiben wollen, die Instanziierung aber gar nicht möglich ist. Damit würde es keinen Sinn mehr ergeben weiterzumachen, da wir auch keine Fehlerlogs oder Sonstiges schreiben können. Grundsätzlich könnten wir vielleicht noch eine Mail erzeugen, aber ein Dump ist natürlich sehr auffällig im System.

Ein zweiter Fall ist der Application Job. Wird im Application Job eine Exception ausgelöst, erhalten wir oft keine weiteren Informationen im Protokoll. Deshalb wissen wir nicht genau: Wieso wurde die Exception ausgelöst und was ist der Inhalt der Meldung? Hier könnten wir zum Beispiel einen Dump im System erzeugen und damit den Kontext des aktuellen Application Jobs einsehen.

 

Auswertung

Schauen wir kurz noch auf den Bereich der Auswertung und wie du die Dumps im System lesen kannst, um weitere Informationen daraus entnehmen zu können.

 

Information

Bist du in den ABAP Development Tools für Eclipse angemeldet und hast deine Feed-Reader eingestellt, erhältst du eine Information in Form eines Pop-ups im unteren rechten Bereich deiner IDE. Hier hast du die Möglichkeit, direkt in das Protokoll zu springen oder, in manchen Fällen, wenn er gerade erst erzeugt wurde, sogar den Debugger zu starten, um dir den Fehler noch einmal im Detail anzuschauen.

 

Zugriff 

Du öffnest also entweder das Protokoll über den Feed-Reader oder über das Pop-up, über das du die Information eines Dumps erhalten hast. Es wird nun ein neues Objekt in der IDE angezeigt. In der Grundauswahl bekommst du den komprimierten Dump, hier sind bereits wichtige Informationen extrahiert und für dich aufbereitet. Im Grunde musst du nicht so viel lesen. Wir erhalten hier bereits erste Informationen, um welche Exception es sich handelt, in welchem Programm abgebrochen wurde und was der Kontext dazu war.

 

 

Im unteren Teil kannst du dann auch noch in den klassischen Dump wechseln. Dort erhältst du die Informationen aufbereitet, wie sie in der Transaktion ST22 vorherrschen. In der Transaktion kannst du grundsätzlich die Dumps auch immer noch sehen, zumindest solange du auf einem On-Prem oder Private-Cloud System arbeitest. In der unaufbereiteten Form stehen viel mehr Informationen, wenn du einmal in die Tiefe des Fehlers absteigen willst und auf den ersten Blick nicht ersichtlich ist, wo der Dump entstanden ist.

 

Bereiche

Werfen wir noch kurz einen Blick auf die verschiedenen Bereiche, die du innerhalb eines Dumps findest, und wie sie dir helfen können, um an weitere Informationen zu kommen.

  • Header Info - Hier bekommst du die Informationen kurz zusammengefasst: was für ein Fehler aufgetreten ist (zum Beispiel ein Runtime Error), ob dieser durch eine Exception ausgelöst wurde, auf welchem System er stattgefunden hat, zu welcher Uhrzeit und auf welchem Server.
  • What happened - In diesem Bereich bekommst du meistens einen längeren Text zu lesen, was eigentlich im Grunde passiert ist. In unserem Beispiel: dass ein RAISE SHORTDUMP oder THROW SHORTDUMP ausgelöst wurde, um einen Kurzdump zu erzeugen.
  • Error Analysis - In der Fehleranalyse wird kurz darauf hingewiesen, wieso es zum Programmabbruch gekommen ist; in diesem Fall, dass eine Ausnahme ausgelöst wurde.
  • Information - Innerhalb der Informationen findest du weitere Details, wo der Abbruch stattgefunden hat: welches Include, welche Methode, welche Zeile.
  • Source Code Extract - In diesem Bereich erhältst du einen Codeausschnitt mit der genauen Abbruchstelle und siehst auch den Code außen herum, um zu erkennen, wie er aufgerufen wurde.
  • Active Calls - Im Bereich der Active Calls findest du den Aufruf-Stack der verschiedenen Objekte bis zu deinem Objekt, an dem der Abbruch stattgefunden hat. So kannst du sehen, aus welchem Standard du gekommen bist oder aus welchen verschiedenen Klassen deine Implementierung aufgerufen wurde.

 

Vollständiges Beispiel

Hier findest du die vollständige Klasse und die Ressourcen, die wir in unserem Artikel verwendet haben. Du kannst die Klasse in deinem System wiederverwenden, um weitere Einstellungen zu prüfen.

CLASS zcl_bs_demo_dump DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.
ENDCLASS.


CLASS zcl_bs_demo_dump IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    RAISE SHORTDUMP NEW cx_sy_zerodivide( ).

    TRY.
        DATA(new_uuid) = cl_system_uuid=>create_uuid_x16_static( ).
        out->write( |UUID: { new_uuid }| ).

      CATCH cx_uuid_error INTO DATA(error).
        RAISE SHORTDUMP error.
    ENDTRY.
  ENDMETHOD.
ENDCLASS.

 

Fazit

Dumps im System sind nicht nur ein Problem, zumindest, wenn sie selten auftreten, sondern können auch genutzt werden, um weitere Informationen, Kontext und Hinweise auf Fehlersituationen bereitzustellen. In der klassischen ABAP-Welt konnte zum Beispiel auch eine Message vom Type X erzeugt werden, um Programme zum Abbruch zu zwingen und einen Dump zu erzeugen. In der modernen ABAP Cloud Welt würden wir hier das Statement RAISE SHORTDUMP einsetzen.

 

Weitere Informationen:
SAP Help - RAISE SHORTDUMP


Enthaltene Themen:
Modernes ABAPDumpRAISE SHORTDUMP
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP - Polymorphe Strukturen

Kategorie - ABAP

Wie sieht es eigentlich mit Strukturen bei der dynamischen ABAP Entwicklung aus? EIne Verarbeitung war hier bisher eher generisch. Mit Polymorphic Structures kann die Entwicklung nun wieder etwas mehr Struktur bekommen.

04.09.2026

ABAP - XCO Logging

Kategorie - ABAP

Die XCO Klassen sind Bestandteil der ABAP Cloud APIs und verfügen über zahlreiche Funktionen, die nicht immer so einfach zu verstehen sind. In diesem Artikel schauen wir uns das Logging Objekt im Detail an.

16.12.2025

ABAP - Der richtige Schlüssel

Kategorie - ABAP

Wie sieht es eigentlich bei der Nutzung von internen Tabellen aus? Immer noch TYPE TABLE in ABAP und die Tabelle ist fertig definiert?

14.11.2025

ABAP - XCO Reguläre Ausdrücke

Kategorie - ABAP

Schauen wir uns einmal die XCO Klassen für die regulären Ausdrücke an und wie damit recht einfach REGEX gegen Texte und Eingaben in ABAP Cloud absetzen kannst. Dabei vergleichen wir auch mit klassischem ABAP.

07.11.2025

ABAP - Escape

Kategorie - ABAP

Schauen wir uns in diesem Artikel einmal im Detail verschiedene Escape Varianten an, die du für die ABAP Entwicklung und Sicherheit im System benötigst.

07.10.2025