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
Setup
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.
Arten von Bugs
(siehe https://en.wikipedia.org/wiki/Software_bug#Types)
- Arithmetic
- Control Flow
- Interfacing
- Concurrency
- Resources
- Syntax
- Teamwork / Coordination
Weitere?!
Debugging-Fähigkeiten
- systematischer Prozess
- Debugging-Strategien
- Heuristiken und Muster für häufige Bugs
- Werkzeuge
Debugging-Strategien
- 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?:
Debugging-Werkzeuge
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
Aufgabe C++
- lade die ZIP-Datei aus GRIPS herunter und entpackt sie
- führe die Datei
good_code
aus. Was passiert? - Starte
good_code
im Debuggergdb
: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
Aufgabe Python
- starte den Python-Debugger mit
python3 -m pdb harshad.py
- gehe analog zur Verwendung von gdb vor
Requestly
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.
Aufgabe
- 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/