ABAP in Eclipse

Debugging

Debugging in Eclipse

  • Modul der Schulung Eclipse & Modern ABAP
  • Fokus dieses Foliensatzes:
    • Debugging-Perspektive in Eclipse
    • Breakpoints & Debug-Einstellungen
    • Arbeiten mit Variablen und internen Tabellen
    • Speicheranalyse (Memory Inspector / Memory Consumption)
  • Voraussetzung:
    • Grundkenntnisse Eclipse & ADT
    • Erste Erfahrungen mit ABAP-Entwicklung

Debugger-Architektur im Vergleich zur SAP GUI

  • (Ur-)Alter GUI-Debugger:
    • Debugging und Programmausführung im selben Prozess
    • Weniger leistungsfähig und heute veraltet
  • Neuer GUI-Debugger:
    • Zwei Prozesse laufen: Der Debugger beobachtet einen separaten Ausführungsprozess
    • Startet nur, wenn noch ein GUI-Fenster geöffnet werden kann (Max. 6 Modis)
  • Eclipse-Debugger:
    • Nutzt das moderne Debugging-Konzept des Application Servers
    • Vergleichbar mit dem neuen GUI-Debugger – nur in Eclipse integriert
    • Kein Fensterlimit, flexibles Layout der Debug-Views

Debugging-Perspektive und Layout

  • Eclipse bietet eine eigene Debug-Perspektive
    • Start über Debug-Icon (Käfer) oder beim ersten Debug-Start
    • Layout unterscheidet sich deutlich von der ABAP-Perspektive
  • Typischer Aufbau:
    • Links: Call-Stack / Threads
    • Mitte: Quellcode-Editor mit aktuellem Haltepunkt
    • Rechts/unten: Variablen, interne Tabellen, Breakpoints
  • Wichtig:
    • Nach dem Debuggen wieder zur ABAP-Perspektive wechseln
    • Sonst fehlen im Alltag wichtige Entwicklungs-Views (Element-Info, Projekt-Explorer, …)

Debugging Perspektive

Einstieg ins Debugging

  • Breakpoint setzen und aus der Anwendung heraus starten
    • z.B. Transaktion, Report, WebGUI, Fiori, OData-Aufruf
  • Beim ersten Treffer:
    • Eclipse wechselt in die Debug-Perspektive (mit Rückfrage-Dialog)
  • Steuerung über Toolbar oder F-Tasten
    • F8 Weiter (Resume) – Ausführung bis zum nächsten Breakpoint
    • F5 Step Into – in aufgerufene Methoden hinein
    • F6 Step Over – nächste Zeile, ohne in Methoden zu springen
    • F7 Step Return – aktuelle Methode bis Rückkehr ausführen

Breakpoints setzen

  • Breakpoints im Editor:
    • Doppelklick auf die Zeilennummer setzt/entfernt einen Breakpoint
    • Im Rand erscheint ein blauer Punkt (aktiver Breakpoint)
  • Bei Treffer:
    • Zeile wird hervorgehoben
    • Ein blauer Pfeil zeigt auf die aktuell auszuführende Zeile
  • Verwaltung in der Breakpoints-View:
    • Liste aller Breakpoints im Workspace
    • Breakpoints aktivieren/deaktivieren, umbenennen, löschen
    • Praktisch nach längeren Debug-Sessions mit vielen Haltepunkten

Call Stack und Ablaufsteuerung

  • Call Stack-View:
    • Zeigt die Aufrufhierarchie (Programme, Klassen, Methoden, Form-Routinen)
    • Aktueller Stack-Frame ist markiert
  • Typische Aktionen:
    • In einen anderen Stack-Frame wechseln (z.B. in den Aufrufer)
    • Lokale Variablen des gewählten Frames ansehen
  • Ablaufsteuerung:
    • Step Into / Over / Return
    • Jump to Line für gezielte Sprünge - Vorsicht, kann logische Konsistenz zerstören

Variablen-Ansicht

  • Variablen-View:
    • Zeigt lokale Variablen, globalen Zustand (Attribute), statische Attribute
    • Strukturierte Darstellung mit aufklappbaren Knoten
  • Nützliche Funktionen:
    • Kontextmenü auf Variablen:
      • Display / Open in New View
      • Suche in Strukturen / Tabellen
    • Anheften (Pinning) einer Variablen zur Beobachtung über mehrere Haltepunkte hinweg
  • Tipp:
    • Wichtige Variablen in die Expressions-View ziehen, um sie separat im Blick zu haben

Interne Tabellen im Debugger

  • Anzeige interner Tabellen:
    • Doppelklick oder Kontextmenü Display auf Tabellenvariable
    • Separate Tabellenansicht mit Spalten, Filter, Sortierung
  • Funktionen:
    • Spalten filtern und sortieren
    • Navigation zu bestimmten Zeilen
    • Teilmengen selektieren (z.B. für Kopieren/Export)
  • Anheften:
    • Tabellenansicht pinnen, um sie bei weiteren Haltepunkten beizubehalten
  • Gut geeignet für:
    • Analyse großer Auswahlergebnisse
    • Nachvollziehen von Änderungen im Verlauf des Debuggings

Breakpoint Kontextmenü

Kontextmenü auf den Zeilennummern:

  • Toggle Breakpoints meint Externer Breakpoint
  • Soft Breakpoints:
    • Stoppen nur, wenn der Debugger bereits läuft
    • Nützlich nach einem Einstiegs-Breakpoint zur Feinsteuerung
  • Disable Breakpoints um in Ruhe weiterzumachen ohne wieder anzuhalten
  • Debug Properties... - besprechen wir auf der nächsten Folie
  • Breakpoint Properties

Debug-Einstellungen

Verteilt auf viele Stellen in der Oberfläche

  • Einstellungen des Break-Points:
    • Kontextmenü im Quellcodeeditor auf den Zeilennummern
    • In der Debug Perspektive bei den Breakpoints
  • Projektbezogene Einstellungen: Rechtsklick auf das Projekt, Einstellungen
  • Allgemeine Einstellungen: Über den Menüpunkt Properties
  • Einstellungen während des Debuggings

Debug Properties - Projektbezogen

  • Debugger ausschalten
  • Debugging für andere Benutzer
  • Debugging für tool requests - Anfrange des ADTs debuggen
  • AMDP Debugger: soll aller Quelltext für das Debuggen kompiliert werden? - Das ist meistens nicht notwendig, solange in den interessanten abschnitten Breakpoints sitzen.

Debug Properties - Allgemein

  • Systemdebugging

Sonstige Optionen zur Laufzeit

  • Commit / Rollback
  • Verbucher Debuggen
  • Memory Snapshots

Breakpoints – Sonderformen

  • Breakpoints im Kontextmenü der Breakpoints-View:
    • Exception-Breakpoint – Stop bei ausgewählten Exceptions
    • Message-Breakpoint – Stop bei ausgewählten Nachrichten (z.B. Warnung/Fehler)
    • ABAP-Statement-Breakpoint – Stop bei bestimmten Sprachelementen (z.B. RAISE)

alt text

Bedingte Breakpoints

  • Idee: Debugger soll nur stoppen, wenn eine Bedingung erfüllt ist
  • Vorgehen:
    • Breakpoint setzen
    • In Breakpoints-View den Breakpoint auswählen
    • Bedingung hinterlegen, z.B.:
      • lv_counter > 100
      • sy-tabix = 42
  • Einsatzbeispiele:
    • Fehler tritt nur in seltenen Konstellationen auf
    • Debuggen großer Schleifen ohne jeden einzelnen Durchlauf anzuhalten

alt text

Watchpoints und Expressions

  • Watchpoints
    • Stoppen, wenn sich der Wert einer Variable ändert
    • In Eclipse über Breakpoints-View eingerichtet
  • Zusätzlich sind Bedingungen möglich:

alt text

Debugging für andere Benutzer

  • Szenario:
    • Fehler tritt bei einer anderen Person (Key-User, Fachbereich) auf. Vor allem mit anderen Berechtigungen
  • Vorgehen:
    • Breakpoints setzen
    • Fachbereichsaktion durchführen lassen
    • Debugger springt bei Ausführung in deinem Eclipse auf
  • Hinweise:
    • Rechte/Authorisierungen beachten
    • Kommunikation mit Fachbereich, damit Aktionen zum richtigen Zeitpunkt durchgeführt werden

Werteänderungen im Debugger

  • Skalare Werte ändern
    • In der Variablen-View die Zelle auswählen
    • Kontextmenü Change Value nutzen
    • Neuer Wert wird unmittelbar im Laufzeitkontext gesetzt
  • Tabellenwerte ändern
    • In der Tabellenansicht Zeile/Spalte wählen
    • Kontextmenü:
      • Change Value – Wert der Zelle ändern
      • Delete Selected Rows – ausgewählte Tabellenzeilen löschen
  • Grenzen wie bisher
    • Importing-Parameter und bestimmte Systemfelder können nicht geändert werden
    • Änderungen gelten nur für die aktuelle Debug-Session

Speicheranalyse und Memory Inspector

  • Motivation:
    • Out-of-Memory-Fehler entstehen oft durch wenige große Tabellen
    • Speicherverbrauch im Debugger sichtbar machen
  • Möglichkeiten in Eclipse / ABAP:
    • Anzeige von ABAP Exceptions, Debugger, internal tables, and memory
    • View für Memory Consumption der internen Sitzung
  • Funktionen:
    • Aktuellen Speicherverbrauch anzeigen
    • Optional automatische Aktualisierung aktivieren
    • Vergleich vorher – nachher bei speicherintensiven Operationen