-
Einführung in rr
- rr ist ein Debugging-Werkzeug für C/C++ unter Linux und soll gdb ergänzen
- Ein Fehler kann einmal aufgezeichnet und diese Aufzeichnung anschließend wiederholt debuggt werden
- Debugging ist möglich, indem dieselbe Ausführung jedes Mal reproduziert wird
- Bietet effiziente Rückwärtsausführung über gdb
-
Funktionen von rr
- Geringer Overhead
- Unterstützt Aufzeichnung und Wiedergabe verschiedener Anwendungen (Firefox, Chrome, QEMU, LibreOffice usw.)
- Kann Multi-Prozess-Workloads aufzeichnen, wiedergeben und debuggen
- Unterstützt gdb-Scripting und IDE-Integration
- Robuste und komprimierte Trace-Dateien, zwischen Maschinen übertragbar
- Bietet einen Chaos-Modus zur Reproduktion intermittierender Bugs
-
Debugging-Erlebnis mit rr
- Anwendung aufzeichnen:
rr record /your/application --args...
- Aufgezeichnete Ausführung debuggen:
rr replay
- Die aufgezeichnete Spur deterministisch debuggen
- Übliche gdb-Befehle können verwendet werden
- Mit Rückwärtsausführung schnell zur Problemstelle gelangen
-
Videos
- Demo-Video zur Aufzeichnung und Wiedergabe von Firefox
- Video mit ausführlicher Erklärung der Grundfunktionen von rr
- Video eines fortgeschrittenen Technikvortrags von Robert O'Callahan
-
Erste Schritte
- Aus dem Quellcode bauen: empfohlen, falls Pakete nicht funktionieren
- Installationsanleitungen für Fedora und Ubuntu verfügbar
-
Hintergrund und Motivation
- Entwickelt, um das Debuggen intermittierender Fehler zu erleichtern
- Durch deterministische Wiedergabe bleiben im Debugging-Prozess gewonnene Informationen gültig
- Rückwärtsausführung macht den Debugging-Prozess einfacher
- rr wird regelmäßig in vielen großen und kleinen Projekten eingesetzt
-
Wie rr funktioniert
- Zeichnet Linux-User-Space-Prozesse auf und erfasst alle Eingaben vom Kernel
- Garantiert bei der Wiedergabe Kontrollfluss auf Befehlsebene sowie Speicher- und Registerinhalte
- Speicherlayout, Objektadressen, Registerwerte usw. bleiben identisch
- Noch leistungsfähiger in Kombination mit Fuzzern und zufälligen Fault-Injection-Tools
-
Der Kontext von rr
- Record-and-Replay-Debugging ist eine alte Idee
- Entwurfsziele mit Fokus auf Firefox
- Verteilbarkeit: läuft auf gewöhnlichen Linux-Kernels, keine Änderungen an der Systemkonfiguration erforderlich
- Geringer Laufzeit-Overhead
- Einfaches Design: vermeidet komplexe Techniken
-
Einschränkungen
- Emuliert eine Single-Core-Maschine
- Kann keine Prozesse aufzeichnen, die Speicher mit Bereichen außerhalb des Aufzeichnungsbaums teilen
- Erfordert eine moderne x86-CPU oder bestimmte ARM-CPUs
- Benötigt Kenntnis aller Systemaufrufe, die von den aufgezeichneten Prozessen ausgeführt werden
- Erfordert Anpassungen an Kernel-Änderungen, Updates von Systembibliotheken und neue CPU-Familien
-
Weiterführende Materialien
- Erweiterter technischer Bericht
- rr-Wiki
- Fragen sind über die Mailingliste oder in
#rr auf chat.mozilla.org möglich
Zusammenfassung von GN⁺
- rr ist ein leistungsstarkes Werkzeug für C/C++-Debugging unter Linux und verbessert durch deterministische Wiedergabe die Effizienz des Debuggings erheblich
- Es unterstützt verschiedene Anwendungen und Multi-Prozess-Workloads und ist dank des geringen Overheads praktisch einsetzbar
- Die Rückwärtsausführung erleichtert den Debugging-Prozess zusätzlich
- Es kann komplexe Anwendungen wie Firefox debuggen und ist daher allgemein nützlich
- Ähnliche Werkzeuge mit vergleichbaren Funktionen sind gdb und Valgrind
1 Kommentare
Hacker-News-Kommentare