Debugging

Debugging

Basics

  • "entwanzen"
  • kommt daher, dass die ersten Computer Relais verwendeten. Als eine Wanze ein Relais blockierte, musste man den Computer entwanzen. Deshalb der Name
  • Heute spricht man von einem Bug, wenn ein Programm-Fehler vorliegt
  • Debugging = Fehlersuche- und Behebung

Kosequenzen von Bugs

  • Compiler gibt Hinweise auf syntaktische/semantische Fehler
  • Programm hält mit Laufzeit Fehler (Run-time Error)
  • Programm hält nie an
  • Programm läuft vollständig, aber gibt inkorrekte Resultate
  • Programm läuft vollständig, aber gibt manchmal(?) inkorrekte Resultate

1. Fehlerlokalisierung

mögliche falsche annahmen

Suchstrategie

2. Verstehen des Fehlers

  1. Was ist der Zustand des Programms vor Ausführung von fehlerhaften Code?
  2. Was ist der Zustand nach Ausführung des Codes?
  3. Was ist der erwartete Zustand?
Was

Namen und Werte aller aktiven Variablen

Debugger

Kernkonzept

  • ein Debugger kann Programm an einem bestimmten Punkt unterbrechen
  • kann bei Unterbrechung den Zustand des Programms anzeigen
  • ein Debugger ermöglicht, den Zustand von Programmen, die durch Laufzeitfehler abgestürzt sind, anzuzeigen
  • Führt oft leichter zu dem Punkt, wo der Fehler aufgetreten ist

Gesetze des Debuggen

(Zoltan Somogyi, Melbourne University)

  • Before you can fix it, you must be able to break it (consistently)
    • Nicht reproduzierbare Bugs ... Heisenbugs ... sind schwierig
  • If you can‘t find a bug where you‘re looking, you‘re looking in the wrong place
    • Eine Pause machen und später weitermachen, ist im Allgemeinen eine gute Idee
  • It takes two people to find a subtle bug, but only one of them needs to know the program
    • Die zweite Person stellt Fragen, um die Annahmen des Debuggers in Frage zu stellen

Workflow

Kommandozeilen-basierte Debugger

gdb

Befehle

Fehler Speicherverwaltung

Typische Speicherfehler

  • Memory Leaks
  • Uninitialisierter Speicher
  • Use after free

Memory Leaks

Uninitialisierter Speicher

Use after free