- Ein benutzerfreundlicher Time-Travel-Debugger mit Unterstützung für verschiedene Programmiersprachen
- Zeichnet die Programmausführung auf, erstellt eigenständig teilbare Trace-Dateien und ermöglicht es, in einer GUI vor- und zurückzuspringen sowie die Historie aller Speicherstellen einzusehen
- Vorteile von Time-Travel-Debugging
- Schwer reproduzierbare Bugs lassen sich leicht beheben: Liegt eine Aufzeichnung der fehlerhaften Ausführung vor, kann die Ursache innerhalb von 30 Minuten gefunden werden
- Wenn der Ursprung eines Werts bekannt ist, wird das Beheben von Bugs einfacher
- Wenn ein unerwarteter Output im Programm auftritt, kann durch Klicken auf das betreffende Ereignis sofort die Stelle gefunden werden, an der das Problem entstanden ist
- CodeTracer verfolgt, wo dieser Wert erzeugt wurde, und hilft so, mit nur wenigen Sprüngen die eigentliche Ursache des Bugs zu finden
- Die Programmausführung lässt sich zu jedem Zeitpunkt frei vorwärts und rückwärts durchsuchen
- Tracing verwendet ein offenes Format, und Projekte zur Unterstützung von Sprachen wie Ruby und Python sind in Arbeit
- Geplante Unterstützung für das Debugging von Systemprogrammiersprachen wie C/C++, Rust, Nim, D, Zig, Go, Fortran und FreePascal durch Integration mit dem RR-Backend
Hauptfunktionen von CodeTracer
Allwissendes Debugging (Omniscience)
- Vergangene und zukünftige Variablenwerte lassen sich an einer bestimmten Codezeile während der Ausführung sofort einsehen
- Änderungen von Variablenwerten innerhalb von Schleifen lassen sich leicht untersuchen
- Ausgeführter und nicht ausgeführter Code sind klar voneinander getrennt
Tracepoints
- Änderungen von Variablenwerten im Programm lassen sich sofort einsehen, ohne zusätzlichen Code auszuführen
- Bedingungen, Funktionsaufrufe und Datenausgaben lassen sich einfach zum Debuggen hinzufügen
Call Trace
- Bietet nicht nur einen einfachen Stack Trace, sondern den vollständigen Funktionsaufrufbaum der Programmausführung
- Lässt sich durch Filtern und Sortieren leicht durchsuchen
Status- und Historien-Explorer (State and History Explorer)
- Änderungen an den Werten aller Variablen lassen sich nachverfolgen
- Man kann sofort zu der Code-Stelle springen, an der sich der Wert einer Variablen geändert hat
- Verfolgt automatisch den Ursprungswert kopierter Variablen und erleichtert so die Bug-Analyse
Ereignisprotokoll (Event Log)
- Stellt wichtige Ereignisse im Programm in chronologischer Reihenfolge dar
- Beim Klicken auf ein bestimmtes Ereignis springt man sofort zum Code an genau diesem Zeitpunkt
Terminalausgabe (Terminal Output)
- Reproduziert
stdout- und stderr-Ausgaben wie in einem Terminal, sodass sich die aufgezeichnete Programmausgabe prüfen lässt
- Per Klick kann zur exakten Code-Position gesprungen werden, an der die Ausgabe erzeugt wurde
Mouse Stepping
- Mit der Maus kann sofort zu bestimmten Teilen des Codes gesprungen werden
- Zeilensprung: Mittelklick mit der Maus (
Ctrl+Klick ebenfalls möglich)
- Funktionsaufruf betreten: Doppelklick auf einen Funktionsaufruf, um nach innen zu springen (
Ctrl+Alt+Klick ebenfalls möglich)
- Weitere Optionen: Zusätzliche Funktionen lassen sich über das Rechtsklick-Menü erkunden
Scratchpad
- Variablenwerte zu einem bestimmten Zeitpunkt lassen sich fixieren, um sie zu vergleichen und zu analysieren
- Probleme lassen sich durch visuellen Vergleich des Code-Ausführungsflusses analysieren
CodeTracer-CLI-Befehle
ct run <application> - Führt das Programm aus und zeichnet es automatisch auf
ct record <application> - Erstellt eine Trace-Datei
ct replay - Spielt die erstellte Trace-Datei ab
ct replay <program-name> - Lädt die Aufzeichnung der letzten Ausführung
ct replay --id=<trace-id> - Führt die Wiedergabe mit einer bestimmten Trace-ID aus
ct replay --trace-folder=<trace-folder> - Führt eine Trace-Datei aus einem bestimmten Ordner aus
ct help / ct --help - Zeigt verfügbare Befehle an
ct version - Zeigt die aktuelle Version an
Tastenkürzel
- Die Standard-Tastenkürzel sind für Visual Studio™-Nutzer vertraut
- Rückwärtsvarianten bestehender Debugging-Funktionen werden zusammen mit der
Shift-Taste bereitgestellt (F10 = "Nächster Schritt", Shift+F10 = "Vorheriger Schritt")
- Tastenkürzel können durch Bearbeiten der Datei
~/.config/codetracer/.config.yml angepasst werden
1 Kommentare
Hacker-News-Kommentare
Cool. Ich hatte vor langer Zeit einmal die Gelegenheit, bei Intel-Prozessordesignern Feature-Wünsche anzubringen.
Die Unterstützung für Noir ergibt Sinn, weil Execution Traces bei ZK-Beweisen besonders wertvoll sind.
Falls ihr Clojure oder ClojureScript verwendet, solltet ihr euch FlowStorm ansehen.
Noir ist eine domänenspezifische Sprache für SNARK-Proof-Systeme.
Ich frage mich, warum CodeTracer in zwei Sprachen geschrieben wurde.
Gefällt mir wirklich sehr. Ich wollte schon immer so etwas haben.
Sieht cool aus, aber in Produktionssystemen würden die Trace-Dateien sehr schnell anwachsen.
Danke, dass ihr das Nim-Ökosystem aufbaut.
Ich bin sehr gespannt. Ich habe bereits an Open Collective gespendet.
Glückwunsch zum Release. Ihr habt bisher großartige Arbeit geleistet.