Tutorial Profiling and Debugging

ASE WS 2022/23

In diesem Tutorial werden wir:

  • einige Debugging-Strategien besprechen
  • ein paar Debugger und hilfreiche Werkzeuge kennenlernen
  • Web-Anwendungen mit requestly prüfen

Achtung: Dieses Dokument unterstützt lediglich die Übung und ist keine vollständige Anleitung

Wir brauchen heute für die Beispiele eine simple Linux-Shell und ein paar Linux-Programme. Dafür kann man sich auch wie beim letzten Mal als Nutzer root auf einem 'disposable root server' via segfault.net einloggen.

ssh root@segfault.net # Password is 'segfault'

Achtung: Der Server ist nicht sicher - keine vertraulichen Infos/Passwörter dort eintippen

Oder: ich richte einen Account auf unserem Projektserver ein (bitte melden)

Alternativ kann man die Übungen auch in einer IDE der Wahl prinzipiell nachvollziehen.

(siehe https://en.wikipedia.org/wiki/Software_bug#Types)

  • Arithmetic
  • Control Flow
  • Interfacing
  • Concurrency
  • Resources
  • Syntax
  • Teamwork / Coordination

Weitere?!

  • systematischer Prozess
  • Debugging-Strategien
  • Heuristiken und Muster für häufige Bugs
  • Werkzeuge
  • Selektives Logging (print, console.log / console.table)
  • schrittweises Debugging (IDE)
  • Unit-Tests
  • Tracing / Log-Analyse
  • Rubber Ducking
  • Divide and Conquer

Zur Frage: brauche ich einen Debugger?:

Die folgenden Werkzeuge sind die Standard-Werkzeuge. Oft existieren auch bessere, neuere Alternativen

  • C: gdb
  • Python: pdb
  • JavaScript/Node.js: "--inspect" + externer Debugger (IDE, Developer Tools)
  • System calls unter Linux: strace
  • lade die ZIP-Datei aus GRIPS herunter und entpackt sie
  • führe die Datei good_code aus. Was passiert?
  • Starte good_code im Debugger gdb:
    • gdb good_code
      • start
      • step(mehrmals bis zum Fehler)
      • bt(Backtrace)
      • (print x)

      Probiere das gleiche mit der Datei good_code.dbg - diese wurde mit Debug-Symbolen kompiliert

  • starte den Python-Debugger mit python3 -m pdb harshad.py
  • gehe analog zur Verwendung von gdb vor

Requestly ist eine Plattform (Webseite, Browser-Extension, Desktop-App) um HTTP-Requests aufzuzeichnen, umzuleiten oder zu modifizieren. Dadurch kann man schnell z.B. Probleme im Frontend-Code identifizieren / überpinseln.

  • lege einen Account auf requestly.io an
  • exploriere die Funktionen dort
  • Nutze eine Filterregel, um herauszufinden, was im Frontend passiert, wenn eine URL im Backend nicht funktionier.
  • Beispiel-Anwendung dafür: https://loc.app.uni-regensburg.de/