CodeTracer – ein in Nim und Rust entwickelter Zeitreise-Debugger
(github.com/metacraft-labs)- 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- undstderr-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+Klickebenfalls möglich) - Funktionsaufruf betreten: Doppelklick auf einen Funktionsaufruf, um nach innen zu springen (
Ctrl+Alt+Klickebenfalls möglich) - Weitere Optionen: Zusätzliche Funktionen lassen sich über das Rechtsklick-Menü erkunden
- Zeilensprung: Mittelklick mit der Maus (
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 aufct record <application>- Erstellt eine Trace-Dateict replay- Spielt die erstellte Trace-Datei abct replay <program-name>- Lädt die Aufzeichnung der letzten Ausführungct replay --id=<trace-id>- Führt die Wiedergabe mit einer bestimmten Trace-ID ausct replay --trace-folder=<trace-folder>- Führt eine Trace-Datei aus einem bestimmten Ordner ausct help / ct --help- Zeigt verfügbare Befehle anct 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.ymlangepasst 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.