Skip to content
IRC-CodingIRC-Coding
DebuggingBreakpointLoggingStacktraceRoot Cause Analysis

Fehler systematisch erkennen und beheben: Debugging, Logging, Breakpoints & Prüfungsfragen

Systematische Fehleranalyse: Debugging mit Breakpoints/Watch/Stacktrace, Logging mit Log-Leveln, Reproduktion und Doku – inkl. Beispiel und Prüfungsfragen.

S

schutzgeist

11 min read
Fehler systematisch erkennen und beheben: Debugging, Logging, Breakpoints & Prüfungsfragen

Fehler systematisch erkennen, analysieren und beheben

Dieser Beitrag ist eine Begriffserklärung zur systematischen Fehleranalyse – inklusive Prüfungsfragen, Kernkomponenten und Tags.

In eigener Sache: Fehler sind unvermeidlich. Jeder Entwickler, egal ob Anfänger oder Profi, verbringt einen Großteil seiner Zeit damit, Dinge zu verstehen, die nicht so funktionieren, wie sie sollten. Systematisches Vorgehen ist dabei der Unterschied zwischen Stunden des Ratestens und einer zielgerichteten Lösung. Gerade in Prüfungen wird erwartet, dass Du nicht nur Fehler beheben, sondern den Prozess der Fehleranalyse nachvollziehbar beschreiben kannst.

In a Nutshell

Systematische Fehleranalyse kombiniert Debugging, Logging und anwendungsspezifische Werkzeuge, um Fehler gezielt zu finden, zu verstehen und zu beheben.

Kompakte Fachbeschreibung

Fehler lassen sich durch strukturiertes Vorgehen erkennen und beheben. Dabei greifen mehrere Werkzeuge ineinander:

  • Debugging mit Breakpoints, Watch-Variablen und Stacktraces ermöglicht es, den Programmablauf Schritt für Schritt zu untersuchen und den Zustand von Variablen zu beobachten.
  • Logging dient als Laufzeitprotokoll und ist besonders wichtig bei sporadischen, asynchronen oder produktionsnahen Fehlern, die sich nicht im Debugger reproduzieren lassen.
  • Anwendungsspezifische Tools wie Makrosprachen (z.B. VBA, ABAP) oder Skripte automatisieren Abläufe und machen Fehler reproduzierbar.
  • Systemlogs wie das Windows Eventlog oder /var/log/ liefern zusätzliche Informationen über das Betriebssystem und Dienste.
  • Root-Cause-Analyse hilft, die wahre Ursache eines Fehlers zu finden, statt nur die Symptome zu behandeln.

Die Kombination dieser Werkzeuge ist entscheidend, um sowohl Laufzeitfehler als auch Logikfehler, Performance-Probleme und unerwartetes Verhalten zuverlässig aufzuspüren.

Bekannte Logging- und Debugging-Frameworks

In der Praxis gibt es viele Tools, die das Logging und Debugging erleichtern. Je nach Programmiersprache und Einsatzgebiet kommen unterschiedliche Frameworks zum Einsatz:

Logging-Frameworks:

  • Python: logging aus der Standardbibliothek, loguru für komfortables Logging
  • Java: Log4j, Logback, SLF4J als Fassade
  • JavaScript/Node.js: winston, pino, bunyan
  • C#/.NET: NLog, Serilog, Microsoft.Extensions.Logging
  • Cross-Plattform: syslog, ELK-Stack, Splunk, Grafana Loki für zentrale Log-Auswertung

Debugging-Tools:

  • IDE-Debugger: VS Code, IntelliJ IDEA, Eclipse, Visual Studio, PyCharm
  • Browser-Debugger: Chrome DevTools, Firefox Developer Tools
  • Spezialtools: gdb für C/C++, pdb für Python, lldb für Swift/Objective-C
  • Tracing/Monitoring: Jaeger, Zipkin, OpenTelemetry für verteilte Systeme

Mehr zu Fehlerbehandlung, Debugging und den passenden Tools findest Du in unserem ausführlichen Artikel: Fehlerbehandlung und Debugging einfach erklärt

Prüfungsrelevante Stichpunkte

  • Debugger und Breakpoints: Erlauben die Laufzeituntersuchung eines Programms an definierten Stellen. Du kannst den Programmfluss Schritt für Schritt verfolgen.
  • Logging: Unverzichtbar für schwer reproduzierbare Fehler, asynchrone Abläufe und Produktionsumgebungen. Logs müssen Zeitstempel, Log-Level und Kontext enthalten.
  • Call Stack: Zeigt die Aufrufhierarchie bis zum Fehlerpunkt und hilft bei der Lokalisierung der Ursache.
  • Watch/Trace: Ermöglichen die Beobachtung von Variablen und Ausdrücken während der Laufzeit.
  • Makros: Können Abläufe in Anwendungen wie Excel oder SAP automatisieren und Fehlerfälle reproduzierbar machen. In der IHK werden sie oft als praxisnahes Werkzeug geprüft.
  • Anwendungsspezifische Skripte: Unterstützen die Analyse in spezialisierten Umgebungen und ergänzen den Debugger.
  • Logging ohne sensible Daten: Personenbezogene Daten, Passwörter und Tokens dürfen nicht im Log landen. Das ist ein wichtiger Sicherheitsaspekt.
  • Systematik spart Zeit: Strukturiertes Vorgehen reduziert die Fehlersuche und minimiert Ausfallzeiten.
  • Fehleranalyse dokumentieren: Ursache, Wirkung, Behebung und Tests müssen dokumentiert werden, oft im Ticket- oder Bugtracking-System.

Kernkomponenten

  1. IDE/Debugging-Umgebung Eine integrierte Entwicklungsumgebung wie VS Code, IntelliJ, Eclipse oder Visual Studio bietet einen eingebauten Debugger. Sie ermöglicht Breakpoints, Step-by-Step-Ausführung, Variableninspektion und Stacktrace-Analyse.

  2. Breakpoints + Step-by-Step Ein Breakpoint ist ein Haltepunkt im Quellcode. Wenn das Programm diesen Punkt erreicht, pausiert es. Mit Step Over, Step Into und Step Out kannst Du den Ablauf gezielt steuern.

  3. Logging mit Log-Leveln Log-Level wie DEBUG, INFO, WARNING, ERROR und CRITICAL steuern, welche Informationen protokolliert werden. In der Entwicklung nutzt Du DEBUG, in der Produktion meist INFO oder höher.

  4. Watch/Trace-Funktionen Watch-Ansichten zeigen den aktuellen Wert von Variablen während der Laufzeit. Traces verfolgen den Aufrufpfad durch das System und helfen bei der Fehlersuche in verteilten Anwendungen.

  5. Exception/Stacktrace-Analyse Eine Exception ist ein Laufzeitfehler. Der Stacktrace zeigt, in welcher Methode und in welcher Zeile der Fehler auftrat und welche Aufrufkette dorthin führte.

  6. Systemlogs (Windows Eventlog, /var/log/...) Neben Anwendungslogs gibt es Systemlogs, die Informationen über das Betriebssystem, Dienste, Treiber und Hardware liefern. Sie sind besonders wichtig bei Infrastrukturproblemen.

  7. Reproduktion mit Testdaten Ein Fehler, der nicht reproduziert werden kann, ist schwer zu beheben. Testdaten und minimale Beispiele helfen, den Fehlerfall wiederholbar zu machen.

  8. Anwendungsspezifische Analyse-Skripte In spezialisierten Systemen wie SAP, Datenbanken oder CAD-Programmen können Skripte oder Abfragen die Analyse unterstützen, wenn der Debugger nicht ausreicht.

  9. Makros zur Reproduktion von UI-Abläufen Makros in Excel, Word oder SAP automatisieren Benutzerinteraktionen. Sie eignen sich besonders, um Fehler in Geschäftsprozessen nachzustellen.

  10. Root-Cause-Analyse + Ticket Die Root-Cause-Analyse findet die wahre Ursache eines Fehlers. Das Ergebnis wird in einem Ticket dokumentiert, zusammen mit der Behebung und den Tests, die den Fix absichern.

Praxisbeispiele

1. Python Logging mit Log-Leveln

import logging

logging.basicConfig(
    filename='app.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

try:
    result = 10 / 0
except ZeroDivisionError as e:
    logging.error(f"Fehler: Division durch Null – {e}")

Erklärung: Das Logging-Format enthält Zeitstempel, Log-Level und Nachricht. Der Fehler wird protokolliert und kann später ohne Debugger analysiert werden. In der Produktion würdest Du ERROR verwenden, während DEBUG in der Entwicklung hilft.

2. Stacktrace in Python lesen

def divide(a, b):
    return a / b

def calculate():
    return divide(10, 0)

calculate()

Erklärung: Der Stacktrace zeigt, dass der Fehler in divide aufgetreten ist, das von calculate aufgerufen wurde. Anhand der Zeilennummern und der Aufrufkette kannst Du die Ursache schnell eingrenzen.

3. Breakpoint und Watch in der IDE

Stell Dir vor, Du hast eine Methode, die ein falsches Ergebnis zurückgibt. Du setzt einen Breakpoint in der Methode, startest das Programm im Debug-Modus und führst es Schritt für Schritt aus. In der Watch-Ansicht beobachtest Du die Variable total und siehst, wann sie einen unerwarteten Wert annimmt. Der Stacktrace zeigt Dir, von wo die Methode aufgerufen wurde.

4. Reproduktion mit einem Makro in Excel

Sub FehlerReproduzieren()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")
    
    For i = 1 To 100
        ws.Cells(i, 3).Value = ws.Cells(i, 1).Value / ws.Cells(i, 2).Value
    Next i
End Sub

Erklärung: Dieses VBA-Makro teilt Werte in einer Schleife. Wenn in Spalte B eine Null vorkommt, entsteht ein Fehler. Durch das Makro kannst Du den Fehler reproduzieren, anstatt ihn manuell in der Oberfläche nachzustellen. Du erkennst, in welcher Zeile der Fehler auftritt, und kannst die Daten korrigieren oder eine Fehlerbehandlung einbauen.

Vorteile und Nachteile

Vorteile

  • Frühzeitige Erkennung von Problemen: Durch Debugging und Logging werden Fehler oft bereits in der Entwicklung oder im Test gefunden, bevor sie die Produktion erreichen.
  • Kombinierbar mit Teststrategien: Unit-Tests, Integrationstests und manuelle Tests ergänzen die Fehleranalyse und helfen, Fehler reproduzierbar zu machen.
  • Reproduzierbare Analyse mit Logs und Makros: Einmal dokumentierte Fehlerfälle können mit Testdaten oder automatisierten Skripten wiederholt werden.
  • Gut dokumentierbar für Teamarbeit: Logs, Stacktraces und Tickets machen den Fehler und seine Behebung für das ganze Team nachvollziehbar.
  • Weniger Ausfallzeit: Systematisches Vorgehen verkürzt die Fehlersuche und beschleunigt die Wiederherstellung von Diensten.
  • Bessere Softwarequalität: Jede analysierte Ursache führt zu einem besseren Verständnis des Systems und zu robusterem Code.

Nachteile

  • Debugging kann zeitintensiv sein: Besonders bei komplexen, verteilten oder asynchronen Systemen kann die Fehlersuche viel Zeit in Anspruch nehmen.
  • Falsche Log-Level-Einstellungen erzeugen zu viel oder zu wenig Info: Zu viele DEBUG-Logs in der Produktion überfluten die Auswertung, zu wenig Information erschwert die Analyse.
  • Makros sind umgebungsabhängig und fehleranfällig: Ein Makro, das auf einer bestimmten Excel-Version oder einem SAP-System läuft, funktioniert möglicherweise in einer anderen Umgebung nicht.
  • Sensiblen Daten muss bewusst geschützt werden: Unbedachtes Logging kann zu Datenschutzverletzungen führen.
  • Nicht jeder Fehler ist im Debugger reproduzierbar: Race Conditions, Netzwerkprobleme oder spezifische Kundendaten erfordern oft zusätzliche Strategien wie Logging oder Tracing.

FAQ: Fehler systematisch erkennen, analysieren und beheben

1. Was ist systematische Fehleranalyse?

Systematische Fehleranalyse ist ein strukturiertes Vorgehen, um Fehler zu erkennen, einzugrenzen, zu verstehen und zu beheben. Dabei werden Werkzeuge wie Debugger, Logging, Stacktraces und Testdaten gezielt eingesetzt.

2. Was ist ein Debugger?

Ein Debugger ist ein Werkzeug, mit dem Du ein Programm Schritt für Schritt ausführen, Breakpoints setzen und Variablenwerte beobachten kannst. Fast jede moderne IDE hat einen eingebauten Debugger.

3. Was ist ein Breakpoint?

Ein Breakpoint ist ein Haltepunkt im Quellcode. Wenn das Programm diese Zeile erreicht, stoppt die Ausführung und Du kannst den aktuellen Zustand untersuchen.

4. Was bedeuten Step Over, Step Into und Step Out?

Step Over führt die aktuelle Zeile aus und bleibt in der aktuellen Methode. Step Into springt in eine aufgerufene Methode hinein. Step Out verlässt die aktuelle Methode und kehrt zur Aufrufstelle zurück.

5. Was ist ein Stacktrace?

Ein Stacktrace ist eine Auflistung der Methodenaufrufe, die zum Zeitpunkt eines Fehlers aktiv waren. Er zeigt, in welcher Zeile der Fehler auftrat und über welche Aufrufkette das Programm dorthin gelangte.

6. Was ist Logging?

Logging ist das Protokollieren von Ereignissen während der Laufzeit eines Programms. Logs helfen, Fehler nachzuvollziehen, besonders wenn diese nicht direkt reproduziert werden können.

7. Welche Log-Level gibt es typischerweise?

Typische Log-Level sind DEBUG, INFO, WARNING, ERROR und CRITICAL. DEBUG ist für Entwicklung, INFO für den normalen Betrieb, ERROR und CRITICAL für Fehler und schwerwiegende Probleme.

8. Warum sollte man keine sensiblen Daten loggen?

Sensible Daten wie Passwörter, Tokens oder personenbezogene Informationen dürfen nicht geloggt werden, weil Logs oft länger gespeichert und von mehreren Personen eingesehen werden können. Das würde Datenschutz und Sicherheit gefährden.

9. Was ist eine Exception?

Eine Exception ist ein Laufzeitfehler, der den normalen Programmablauf unterbricht. Beispiele sind Division durch Null, Null-Pointer-Zugriffe oder Datei-not-found-Fehler.

10. Was ist der Unterschied zwischen Syntaxfehler und Laufzeitfehler?

Ein Syntaxfehler verhindert, dass das Programm überhaupt ausgeführt wird, weil die Regeln der Sprache verletzt sind. Ein Laufzeitfehler tritt während der Ausführung auf, zum Beispiel durch ungültige Eingaben oder fehlende Ressourcen.

11. Was ist ein Watch-Fenster?

Das Watch-Fenster zeigt während des Debuggens den aktuellen Wert von Variablen oder Ausdrücken an. Du kannst damit verfolgen, wie sich Werte während der Ausführung ändern.

12. Was ist ein Systemlog?

Ein Systemlog protokolliert Ereignisse des Betriebssystems oder von Diensten. Unter Windows ist das das Eventlog, unter Linux finden sich Logs in /var/log/.

13. Was sind Makros und wie helfen sie bei der Fehleranalyse?

Makros sind automatisierte Abläufe, die Benutzerinteraktionen in Programmen wie Excel, Word oder SAP nachstellen. Sie helfen, Fehler in Geschäftsprozessen reproduzierbar zu machen.

14. Was ist Root-Cause-Analyse?

Root-Cause-Analyse ist die Suche nach der wahren Ursache eines Fehlers, nicht nur nach dem Symptom. Ziel ist es, das Problem an der Quelle zu beheben und Wiederholungen zu verhindern.

15. Warum ist Reproduzierbarkeit bei Fehlern wichtig?

Ein Fehler, der nicht reproduziert werden kann, kann meist nicht zuverlässig behoben werden. Reproduzierbarkeit durch Testdaten oder Skripte ist daher ein zentraler Schritt in der Fehleranalyse.

16. Was ist der Vorteil von strukturierten Logs?

Strukturierte Logs enthalten Zeitstempel, Log-Level, Thread-Informationen und Kontext. Sie sind maschinenlesbar und lassen sich besser filtern, durchsuchen und auswerten.

17. Was ist ein Trace?

Ein Trace verfolgt den Aufruf- und Datenfluss durch ein System. Besonders in verteilten Anwendungen helfen Traces, den Weg einer Anfrage über mehrere Services hinweg nachzuvollziehen.

18. Was sind typische Fehlerquellen in der Softwareentwicklung?

Typische Fehlerquellen sind falsche Annahmen über Eingabedaten, unbehandelte Randfälle, Race Conditions, fehlende Fehlerbehandlung, Konfigurationsfehler und unzureichende Tests.

19. Was ist ein Race Condition?

Eine Race Condition tritt auf, wenn mehrere Threads oder Prozesse gleichzeitig auf dieselbe Ressource zugreifen und das Ergebnis von der Reihenfolge der Zugriffe abhängt. Solche Fehler sind oft schwer reproduzierbar.

20. Was sollte in einem Fehler-Ticket dokumentiert werden?

Ein Fehler-Ticket sollte Fehlerbeschreibung, Reproduktionsschritte, erwartetes und tatsächliches Verhalten, Logs, Stacktraces, Ursachenanalyse, Behebung und Tests enthalten.

21. Was ist der Unterschied zwischen Logging und Tracing?

Logging protokolliert einzelne Ereignisse in einer Anwendung. Tracing verfolgt den gesamten Weg einer Anfrage über mehrere Komponenten hinweg und hilft bei der Analyse verteilter Systeme.

22. Was ist eine Regression?

Eine Regression ist ein Fehler, der nach einer Änderung neu auftritt, obwohl zuvor alles funktionierte. Regressionstests sollen solche Fehler früh erkennen.

23. Was ist Exception Handling?

Exception Handling ist der Umgang mit Laufzeitfehlern. Mit try/catch oder ähnlichen Konstrukten kannst Du Fehler abfangen, protokollieren und das Programm kontrolliert weiterlaufen lassen.

24. Warum ist es wichtig, Fehlerbehebungen zu testen?

Eine Fehlerbehebung ohne Test ist nicht sicher. Erst ein Test, der den Fehler reproduziert und nach dem Fix besteht, beweist, dass das Problem tatsächlich gelöst ist und nicht wieder auftritt.

25. Was ist die 5-Why-Methode?

Die 5-Why-Methode ist eine Technik zur Root-Cause-Analyse. Durch das wiederholte Fragen nach dem Warum wird die Ursache eines Fehlers Schicht für Schicht aufgedeckt.

Freie Antwort

Systematische Fehleranalyse ist ein wiederholbarer Prozess. Er beginnt mit der Beobachtung eines Fehlers und der möglichst genauen Beschreibung. Im nächsten Schritt reproduzierst Du den Fehler mit Testdaten oder einem Skript. Dann nutzt Du den Debugger, um den Zustand zur Laufzeit zu untersuchen, und analysierst Logs oder Stacktraces, um die Ursache zu finden. Die wahre Ursache wird mit einer Root-Cause-Analyse identifiziert, bevor Du den Fehler behebst und mit Tests absicherst. Am Ende dokumentierst Du alles in einem Ticket, damit das Team und spätere Du dieselbe Fehlerursache schneller erkennen.

Zusätzliche Hinweise

In Prüfungen geht es oft darum, wie Du Fehler eingrenzt und dokumentierst. Gute Logs enthalten Zeitstempel, Level, Thread-Informationen und Kontext. In Tool-Umgebungen wie Excel, SAP oder CAD sind Makros oder Skripte häufig Teil der Analyse. Achte darauf, dass Logs keine sensiblen Daten enthalten und dass Du bei asynchronen oder verteilten Systemen auf Tracing zurückgreifst. Dokumentiere nicht nur die Behebung, sondern auch die Ursache, damit das Problem nicht wiederkehrt.

Lernstrategie

  1. Verständniseinstieg: Erzeuge absichtlich Fehler in einer kleinen Anwendung und untersuche sie mit Debugger, Logs und Stacktrace.
  2. Vertiefung: Entwickle ein eigenes Logging-Schema mit Zeitstempel, Level, Thread und Kontext. Experimentiere mit verschiedenen Log-Leveln.
  3. Prüfungsfokus: Entscheide in verschiedenen Szenarien, welches Werkzeug das Richtige ist: Debugger, Logging, Stacktrace, Makro oder Systemlog.
  4. Fehlervermeidung: Sichere jeden Fix durch einen Test ab, der den Fehler reproduziert. Dokumentiere Ursache, Wirkung und Lösung in einem Ticket.
  5. Praxisbezug: Nutze in Excel oder SAP ein kleines Makro, um einen Fehlerfall automatisch nachzustellen und die Analyse zu üben.

Themenanalyse

  • Technischer Kern: Debugging, Logging, Stacktrace-Analyse, Exception Handling, IDE-Funktionen
  • Herausforderungen: Reproduzierbarkeit, unklare Fehlerursachen, asynchrone Abläufe, verteilte Systeme
  • Sicherheit: Logging ohne personenbezogene Daten, Zugriffsschutz auf Logs, keine sensiblen Daten im Stacktrace
  • Dokumentationspflichten: Ticketnachweise, Root-Cause-Analyse, Behebung, Tests und Lernpunkte
  • Wirtschaftlichkeit: Weniger Ausfallzeit, schnellere Fehlerbehebung, bessere Wartbarkeit, höhere Softwarequalität

Weiterführende Infos

  1. https://docs.python.org/3/library/logging.html
  2. https://code.visualstudio.com/docs/editor/debugging
  3. https://support.microsoft.com/de-de/excel-makros
  4. https://www.baeldung.com/java-debugging-tips
  5. https://blogs.sap.com/2020/02/27/introduction-to-abap-debugging/
Zurück zum DEV Blog
Share:

Ähnliche Beiträge