Die besten ABAP Debugger Tipps und Tricks

Der ABAP Debugger ist eines der nützlichsten und mächtigsten Werkzeugen eines ABAP-Entwicklers in SAP ERP bzw. SAP S/4HANA. Wohl oder übel wird jeder ABAP-Entwickler dieses Werkzeug benutzen, um sein ABAP-Programm Schritt-für-Schritt zu durchlaufen und im Detail Auffälligkeiten und Fehler zu untersuchen.

In diesem Artikel werden die besten und wichtigsten Tipps und Tricks rund um den ABAP Debugger vorgestellt. Alle aufgeführten Tipps und Tricks beruhen auf den neuen ABAP Debugger, der ab dem SAP NetWeaver 7.0 zur Verfügung steht.

Wechsel zum neuen ABAP Debugger

Standardmäßig ist im SAP-System die maximale Anzahl an Modi auf 6 eingestellt. Das heißt, dass man maximal 6 Fenster bzw. Modi gleichzeitig geöffnet haben kann. Ist ein Breakpoint aktiv, der verwendet wird, so startet ein siebter Modus im alten Debugger (Klassischer ABAP Debugger). Es wird beim Öffnen die Statusmeldung “Kein weiterer externer Modus für den Neuen ABAP Debugger verfügbar.” angezeigt.

Einen Wechsel vom alten Debugger (klassischen Debugger) zum neuen Debugger kann man einfach über die Menüfunktion “Debugging > Wechsel zum Standard ABAP Debugger” vollziehen. Dabei darf natürlich die maximale Anzahl an Modi ebenfalls nicht überstiegen werden. Sprich: Im Standard muss ein Fenster bzw. Modus geschlossen werden und dann die Wechsel-Funktion betätigt werden.

Wechsel zum neuen ABAP Debugger

In der Transaktion RZ10 kann man im Profil DEFAULT den Parameter rdisp/max_alt_mode auf die maximale Anzahl an geöffneten Modi einstellen. Wenn dieser Parameter im Profil DEFAULT noch nicht vorhanden ist, gilt die Standardeinstellung, nämlich 6.

Nützliche Debugger Einstellungen

Wenn man den ABAP Debugger startet, dann kann man die Debugger-Einstellungen verändern. Unter “Einstellungen > Debugger Profil/ Einstellungen ändern” oder der Tastenkombination “Umschalt + F1” ruft man diese auf.

ABAP Debugger Einstellungen

Im Folgenden werden nützliche Einstellungsmöglichkeiten vorgestellt.

Systemdebugging

Im ABAP Debugger kann es gut vorkommen, dass man nicht auf Systemprogramme zugreifen kann. Dann liegt das daran, dass das Systemdebugging ausgeschaltet ist.

In den Debugger-Einstellungen oder über “Einstellungen > Systemdebugging ein/aus” kann man das Systemdebugging einfach aktivieren. Daraufhin erscheint in der Statusleiste die Meldung “Systemdebugging wurde eingeschaltet”. Mit dem Befehl “/hs” in der OK-Code- bzw. Kommandofeldzeile kann man ebenfalls das Systemdebugging aktivieren.

Generell kann man ein ABAP-Programm als Systemprogramm deklarieren, indem man in den Programmeigenschaften den Status auf S (Systemprogramm) setzt. Die Programmeigenschaften ruft man über den ABAP-Editor (Transaktion SE38) auf, indem man den Radio-Button auf Eigenschaften setzt und den Ändern-Button klickt.

Verbuchungsdebugging

Diese Funktion ist dann nützlich, wenn man asynchrone Programmierungen durch CALL FUNCTION XX IN UPDATE TASK untersuchen möchte.

Der ABAP Debugger kann nur einen Prozess verfolgen. Durch den Zusatz “IN UPDATE TASK” wird die Funktion asynchron in einer speziellen Verbuchungslogik nach dem COMMIT WORK Befehl ausgeführt.

Startet man den ABAP Debugger und aktiviert folglich diese Einstellungen, wird der Breakpoint in der Funktion ausgeführt.

TRFC (in Background Task): Versenden sperren

Durch den Zusatz “IN BACKGROUND TASK” werden asynchrone Aufrufe im Hintergrund ausgeführt. Diese Aufrufe werden zusammen mit anderen TRFC-Aufrufen nach dem COMMIT WORK-Befehl ausgeführt.

Der ABAP Debugger kann auch diese Funktionen nicht folgen, da er nur einem einzigen Prozess zugeordnet wird.

Aktiviert man jedoch diese Einstellung, werden diese Aufrufe im System zwischengespeichert, anstatt direkt ausgeführt zu werden. In der Transaktion SM58 (TRFC Monitor) kann man über die Funktion “Bearbeiten > LUW debuggen” unverarbeitete LUW (logical unit of work) untersuchen und debuggen.

Schließe Debugger nach ‘Weiter’ (F8) und Rollbereichsende

Normalerweise ist der Modus mit dem ABAP Debugger nach Drücken der F8-Taste noch geöffnet, inaktiv und wird erst dann geschlossen, wenn das zugrundeliegende Programm beendet wird.

Mit dieser Einstellung wird der ABAP Debugger automatisch geschlossen, wenn die F8-Taste betätigt wird und die interne Session (Rollbereichsende) beendet ist.

Ausnahmeobjekt immer erzeugen

Mit der Anweisung “CATCH <Exception>” werden Ausnahmen in ABAP gefangen. Wenn man dabei keine entsprechende Zuweisung getätigt hat, hat man normalerweise keinen Zugriff auf das Ausnahmeobjekt.

Mit dieser Einstellung wird immer ein Ausnahmeobjekt erzeugt, das man über den Button “Ausnahmeobjekt anzeigen” analysieren kann.

Sortierung vor READ BINARY SEARCH überprüfen

Die Sortierreihenfolge einer internen Tabelle muss zwingend mit den Schlüsselfeldern in dem READ BINARY SEARCH Befehl übereinstimmen.

Falls die Sortierung der internen Tabelle überhaupt nicht durchgeführt wurde oder nicht mit den Schlüsselfeldern gemäß dem READ BINARY SEARCH Befehl, kann das zu unvorhergesehenen Ergebnissen führen. Es kann sogar vorkommen, dass das gewünschte Ergebnis nicht gefunden wird, obwohl der Eintrag in der internen Tabelle existiert.

Solche Fehleranalysen können bei mehreren hundert oder gar tausenden Einträgen sehr schwer umsetzbar sein.

Durch diese Einstellung in den Debugger-Einstellungen überprüft das System jedes Mal vor der Ausführung des READ BINARY SEARCH Befehls die Sortierreihenfolge der internen Tabelle mit den angegebenen Schlüsselfeldern des READ BINARY SEARCH Befehls. Ist diese Reihenfolge inkorrekt, erhält man einen Laufzeitfehler (ITAB_ILLEGAL_ORDER) und kann die Ursache besser analysieren.

Funktionsbaustein testen – Testdatenverzeichnis

Oft bearbeitet man im ABAP Debugger Variablen. Bei internen Tabellen werden mehrere Zeilen verändert. Es gibt nun einen einfachen Weg, wie man diese geänderten Variablen als Testdaten zwischenspeichern kann, um sie beim Testen von Funktionsbausteinen im Testdatenverzeichnis wieder verwenden zu können. So spart man sich bei der nächsten Ausführung der Funktionsbausteine viel Zeit und Aufwand.

Es gibt die Möglichkeit, Import-Parameter als Testdaten zu speichern. Hierfür klickt man doppelt auf den gewünschten Import-Parameter, sodass dieser in der Variablenübersicht auftaucht. Anschließend klickt man dort mit der rechten Maustaste auf den Namen der Variable und wählt die Funktion “Sichern der Parameter als Testdaten (SE37)” aus.

Parameter als Testdaten sichern

Nachdem man schließlich den Namen der Testdaten angibt, kann diese bei zukünftigen Tests über den Button “Testdatenverzeichnis” oder der Tastenkombination “Strg + Umschalt + F6” ausgewählt werden.

Testdatenverzeichnis aufrufen

Workprozess debuggen

In der Transaktion SM50 werden die Workprozesse des SAP-Servers aufgelistet. Hier kann man über die Menüfunktion “Administration > Programm > Debugging” das Programm im ABAP Debugger näher analysieren.

Das ist vor allem dann sehr nützlich, wenn sich ein Programm in einer Endlosschleife befindet und Du die Ursache herausfinden möchtest.

Programm in Endlosschleife debuggen

Startet man ein Programm und es befindet sich in einer Endlosschleife, gibt es einen einfachen Trick, wie man das Programm auch nach der Ausführung noch debuggen kann.

Man startet in einem zweiten Modus die Transaktion SE38 (ABAP Editor) und setzt einen Session-Breakpoint in eine Zeile, die in der Endlosschleife ausgeführt wird. Zusätzlich aktiviert man die Einstellung “Session-Breakpoint sofort aktiv” in den benutzerspezifischen Einstellungen (Hilfsmittel > Einstellungen > Tabreiter ABAP Editor > Tabreiter Debugging > Session-Breakpoint sofort aktiv).

Session-Breakpoint sofort aktiv

Daraufhin wird der in dem zweiten Modus gesetzte Breakpoint sofort verwendet und der ABAP Debugger startet. Hier kann man einzelne Werte ändern und die Endlosschleife schließlich verlassen.

Debugger-Sitzung sichern für nachträgliche Analysen

Sehr nützlich für die nachträgliche Analyse von einer Debugger-Sitzung sind Debugger Varianten. Es kann gut sein, dass man zu einem späteren Zeitpunkt das Problem im ABAP Debugger noch einmal mit genau den gleichen Rahmenparametern überprüfen möchte.

Über die Menüfunktion “Debugger > Debugger Sitzung > Sichern” kann man die aktuellen Einstellungen sowohl in einer Datei als auch auf der Datenbank speichern.

Debugger - Debugger Sitzung - Sichern

Nachdem man die Funktion aufgerufen hat, erscheint ein neues Fenster. Hierbei kann man angeben, ob man die Einstellungen in einer Datei oder direkt in der Datenbank speichern möchte. Der Name der Sitzung dient der Wiederverwendung der Sitzung. Zusätzlich hinaus kann man entscheiden, welche Bestandteile man speichern möchte.

Sichern der aktuellen Debug Sitzung

Diese Debugger-Sitzung kann man einfach und schnell im Debugger über folgende Menüfunktion laden: Debugger > Debugger Sitzung > Laden. Alternativ kann man direkt die Tastenkombination “Umschalt + F11” benutzen.

ABAP Variablen vergleichen – Diff Werkzeug (Diff-Tool)

Mit dem Diff Werkzeug (Diff Tool) kann man zwei Variablen auf Unterschiede untersuchen.

Damit man das Diff Werkzeug starten kann, muss man zuerst auf die zwei Variablen doppelt klicken, damit diese in der Variablenübersicht aufgelistet werden. Anschließend wählt man diese beiden Variablen aus und klickt auf den Button “Vergleich anstarten”.

Vergleich anstarten

Daraufhin springt man in den Tabreiter “Diff” (Diff Tool) und erhält die Unterschiede visuell dargestellt.

Diff Tool

Alternativ kann man gleich in den Tabreiter “Diff” wechseln, die zu vergleichenden Variablen in den Feldern “Variable 1” und “Variable 2” eingeben und auf “Vergleich starten” klicken.

Job debuggen

Die Transaktion SM37 ermöglicht die Übersicht über alle Jobs. Hierüber ist es auch möglich, Jobs zu debuggen.

Zuerst ruft man die Transaktion SM37 auf und gibt die entsprechenden Filterkriterien an, um seinen ausgewählten Job angezeigt zu bekommen. Daraufhin wählt man seinen gewünschten Job aus, gibt in dem OK-Code-Feld jdbg ein und drückt die Enter-Taste. Alternativ kann man auch die Menüfunktion “Zusätze > Job debuggen” wählen.

jdbg in der Jobübersicht

Daraufhin startet der ABAP Debugger. Nun muss man mehrmals die F7-Taste drücken, um die Spool-Funktionen zu verlassen und in das gewünschte Programm zu gelangen.

Beachte auch den SAP-Hinweis 573128 für weitere Hinweise und Erläuterungen.

Diese Möglichkeit bildet eine Alternative zur vorgestellten Debugging-Möglichkeit mit der Transaktion SM50 dar.

Sicht in Detailanzeige

In der Detailanzeige kann man sich den gesamten Inhalt einer Variable anzeigen lassen. Je nach Sichtweise ist diese Anzeige jedoch nicht gerade vorteilhaft für den ABAP-Entwickler.

So kann man beispielsweise den großen Inhalt in hexadezimal mit der Sichtweise Textübersetzung und dem korrekten Codepage (z.B. 1147) schön formatiert anzeigen lassen.

Daten in XML kann man über den XML-Browser anzeigen lassen.

Detailanzeige - XML Browser

Geladene Programme (Globale Daten)

Im Spezialwerkzeug “Geladene Programme (Globale Daten)” kann man sich alle geladene Programme und deren globalen Daten anzeigen lassen. Es kann sehr gut vorkommen, dass die Tabreiter “Locals” (lokale Variablen und Parameter) und “Globals” (globale Variablen) nicht ausreichen.

Das Spezialwerkzeug kann man einfach nutzen, indem man auf den Button “Neues Werkzeug” klickt und “Werkzeuge > Spezialwerkzeuge > Geladene Programme (Globale Daten)” verwendet.

Spezialwerkzeuge - geladene Programme (globale Daten)

Anschließend erscheint das Werkzeug im ABAP Debugger mit zwei Tabreiter: Geladene Programme und globale Daten. Klickt man bei den geladenen Programmen auf die Ikone für die Navigation zu den globalen Daten, werden im Tabreiter “Globale Daten” alle globale Variablen des geladenen Programms angezeigt.

Geladene Programme - globale Daten

Web-Service debuggen

Web-Services werden in der Transaktion SICF verwaltet. Über diese Transaktion ist es auch möglich, Web-Services zu debuggen. Hierbei sucht man den gewünschten Service aus und wählt die Menüfunktion “Bearbeiten > Debugging > Debugging aktivieren”.

Anschließend kann man einzelne Einstellungen vornehmen und schließlich den “Aktivieren”-Button oder “Umschalt + F1” nutzen.

Daraufhin ist das Debugging aktiviert und man springt schließlich in die HTTP-Anfrage, in der man nun Session-Breakpoints setzen kann.

Näheres zum Debugging von externen Aufrufen bzw. HTTP-Aufrufen liefert der SAP-Hinweis 668256.

Mit einem externen Breakpoint kann man natürlich auch externe RFC- oder HTTP-Aufrufe debuggen. Den RFC-Benutzer trägt man in den benutzerspezifischen Einstellungen ein: Hilfsmittel > Einstellungen > ABAP Editor > Debugging > Benutzer.

Hinweis: Entferne nach dem Debuggen Deine externen Breakpoints oder lösche aus den benutzerspezifischen Einstellungen den RFC-Benutzer heraus. Denn ansonsten greift bei jedem externen RFC- oder HTTP-Aufruf der externe Breakpoint, wenn die Programmzeile ausgeführt wird.

ABAP Debugger – Watchpoints

Neben den Breakpoints, die in einer bestimmten Programmzeile statisch ausgeführt werden, gibt es die Watchpoins. Mithilfe der Watchpoints kann man im ABAP Debugger in Abhängigkeit von einem bestimmten Wert einer Variable das Programm untersuchen.

Man kann ein Watchpoint über den Watchpoint-Button oder der Tastenkombination “Umschalt + F4” anlegen.

Watchpoint anlegen

Daraufhin kann man die gewünschte Bedingung festlegen. In folgendem Beispiel wird eine Schleife in Abhängigkeit von einer Zählvariable durchlaufen. Nun möchte man nicht bis zum 90.000ten Schleifendurchlauf manuell die Schleife untersuchen, sondern direkt zum gewünschten Punkt springen. So kann man einfach die Bedingung “lv_index = 90000” eintragen.

Watchpoint anlegen - Bedingung
REPORT zzz_test.

DATA: lv_index TYPE i.

WHILE lv_index < 100000.
  lv_index = lv_index + 1.
ENDWHILE.

WRITE: / 'DONE'.

Watchpoints sind auch ein nützliches Hilfsmittel, wenn es darum geht, Nachrichten in SAP ERP bzw. SAP S/4HANA zu debuggen.

Systemlog-Meldungen – SM21

Alle Aktivitäten im ABAP Debugger werden in der Transaktion SM21 protokolliert. Man sollte deshalb im Produktivsystem die Tätigkeiten dokumentierten und eine nachvollziehbare Begründung darlegen. Von wissenden Prüfern wird das Systemlog ausgewertet und überprüft.

So erhalten bspw. Feldänderungen die hohe Priorität mit der Meldungs-ID A19.

Springe zur Anweisung

Die Funktion “Springe zur Anweisung” ist sehr nützlich im ABAP Debugger. Damit ist es möglich, an verschiedene Stellen im Debugger zu springen. Dabei werden die Programmzeilen zwischen dem Debugger-Cursor (also aktuell untersuchende Programmzeile) und der Programmzeile, zu der gesprungen wird, nicht ausgeführt.

Das ist dann nützlich, wenn man einen Schritt zurückgehen möchte oder einen Programmschritt überspringen möchte.

Die Funktion “Springe zur Anweisung” kann im ABAP Debugger einfach ausgeführt werden, indem man in die gewünschte Zeile klickt und mit der rechten Maustaste “Springe zur Anweisung” wählt. Alternativ kann man die Menüfunktion “Debugger > Zur Anweisung springen” oder die Tastenkombination “Umschalt + F12” benutzen.

So muss man nicht jedes Mal das komplette Programm durchlaufen oder neu ausführen lassen und kann Kleinigkeiten direkt analysieren.

Generell sollte man auch diese Funktion nicht im Produktivsystem verwenden, da es zu unerwünschten Seiteneffekten treten kann. Diese Aktionen werden in der Transaktion SM21 (Systemprotokoll) ebenfalls protokolliert und können nachvollzogen werden.

Nützliche Shortcuts

ShortcutBeschreibung
F5Einzelschritt
F6Ausführen (Springt nicht in Funktionen hinein)
F7Return (Sprung aus Funktion heraus)
F8Weiter (Sprung zum nächsten Breakpoint oder Programm wird vollständig beendet)
F9Breakpoints anlegen
Strg + Umschalt + 7Cursor wird in OK-Code-Zeile gesetzt

Nützliche Befehle in OK-Code-Zeile

BefehlBeschreibung
/hDebugging aktivieren
/haDynpro (PAI, PBO) überspringen und Debugger direkt im ABAP Code starten
/hmusaSpeicherabzug erstellen (kann im Memory Inspector – Speicherverbrauchsanalyse (Transaktion S_MEMORY_INSPECTOR) untersucht werden)
/hsSystemdebugging aktivieren
/hxDebugger trennen
/ronLaufzeitanalyse starten (ABAP Laufzeitanalyse – SE30)
/roff Laufzeitanalyse stoppen(ABAP Laufzeitanalyse – SE30)
jdbgJob debuggen (Transaktion SM37, SAP-Hinweis 573128)

Über den Autor

Andreas Geiger

Schön, dass Du Dich für SAP ERP bzw. SAP S/4HANA interessierst.

Mein Name ist Andreas Geiger und ich bin der Gründer von ERP-UP.de. Mein Ziel ist es, so viel nützliches Wissen wie möglich über das SAP ERP-System zu vermitteln. Ich möchte Dir damit einen Mehrwert bieten. Es freut mich, wenn ich Dir damit helfen kann.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar