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.
ABAP Debugger einschalten
Manchmal weiß man nicht genau, welcher ABAP-Code den Fehler verursacht oder was genau ausgeführt wird. Man kennt die Klasse, den Funktionsbaustein oder den Report nicht. Um einen einfachen Einstieg in das Programm generell zu haben und den ABAP Debugger zu starten, kann man im Befehlsfeld den Shortcut /h eingeben und mit der Enter-Taste bestätigen. Die nächste Aktion, die man in der SAP GUI tut, wird im Debugger ausgeführt.
Daraufhin erscheint die Meldung „Debugging wurde eingeschaltet“ mit der Meldungsnummer SY432.
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.
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.
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.
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.
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).
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.
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.
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“.
Daraufhin springt man in den Tabreiter „Diff“ (Diff Tool) und erhält die Unterschiede visuell dargestellt.
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.
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.
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.
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.
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.
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.
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
Shortcut | Beschreibung |
---|---|
F5 | Einzelschritt |
F6 | Ausführen (Springt nicht in Funktionen hinein) |
F7 | Return (Sprung aus Funktion heraus) |
F8 | Weiter (Sprung zum nächsten Breakpoint oder Programm wird vollständig beendet) |
F9 | Breakpoints anlegen |
Strg + Umschalt + 7 | Cursor wird in OK-Code-Zeile gesetzt |
Nützliche Befehle in OK-Code-Zeile
Befehl | Beschreibung |
---|---|
/h | Debugging aktivieren |
/ha | Dynpro (PAI, PBO) überspringen und Debugger direkt im ABAP Code starten |
/hmusa | Speicherabzug erstellen (kann im Memory Inspector – Speicherverbrauchsanalyse (Transaktion S_MEMORY_INSPECTOR) untersucht werden) |
/hs | Systemdebugging aktivieren |
/hx | Debugger trennen |
/ron | Laufzeitanalyse starten (ABAP Laufzeitanalyse – SE30) |
/roff | Laufzeitanalyse stoppen(ABAP Laufzeitanalyse – SE30) |
jdbg | Job debuggen (Transaktion SM37, SAP-Hinweis 573128) |
Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
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.