16 Punkte von GN⁺ 2025-03-07 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2025-03-07
Hacker-News-Kommentare
  • Cool. Ich hatte vor langer Zeit einmal die Gelegenheit, bei Intel-Prozessordesignern Feature-Wünsche anzubringen.

    • Ich bat um einen System-Tick-Timer zum Timestamping von Logs, und sie haben ihn umgesetzt.
    • Ich bat auch um eine Bus-Maske und ein Wertregister zum Auslösen von Debug-Interrupts, und auch das wurde umgesetzt.
    • Ich bat um eine Historie der Jump-Quellen, aber das wurde nicht realisiert.
    • Intel verkaufte damals teure Debug-Probes, die den Bus aufzeichneten.
    • Meine Jump-Historie hätte für die meisten Nutzer deren Notwendigkeit beseitigen können.
    • Am Ende wurde es nicht umgesetzt, und wir bauten den Code erneut als „Debug“-Build, um Tracing und weitere Nachverfolgung hinzuzufügen.
  • Die Unterstützung für Noir ergibt Sinn, weil Execution Traces bei ZK-Beweisen besonders wertvoll sind.

    • Ich hoffe auf Implementierungen für Python und Ruby.
    • Wegen der dynamischen Natur dieser Sprachen sind Bugs dort manchmal besonders schwer zu finden.
    • Ich frage mich, ob hier jemand Noir benutzt hat.
    • Ich frage mich, wie hoch der Performance-Overhead des Trace-Mechanismus ist.
    • Ich frage mich auch, ob Unterstützung für JavaScript/TypeScript für Webentwicklung geplant ist.
  • 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.

    • Ich werde es später mit Python ausprobieren.
    • JS/TS-Unterstützung wäre ebenfalls schön.
    • Ich frage mich, ob der rr-Debugger macOS, Windows und Android unterstützt.
    • Ich frage mich auch, wie aufwendig das Recording für gewöhnliche Apps ist.
    • Es wäre auch gut, wenn ein LLM über einen MCP-Server Kontext bereitstellen könnte oder wenn man das LLM auswählen lassen könnte, welche Variablenhistorie es sehen soll.
    • Eine Funktion zum Filtern von Aufzeichnungen wäre ebenfalls gut.
  • Sieht cool aus, aber in Produktionssystemen würden die Trace-Dateien sehr schnell anwachsen.

    • Ich frage mich, wie man die Dateien einer bestimmten Session zuordnet.
  • Danke, dass ihr das Nim-Ökosystem aufbaut.

  • Ich bin sehr gespannt. Ich habe bereits an Open Collective gespendet.

    • Das Team ist voller talentierter Leute.
    • Es gibt ein großartiges Interface für Time-Travel-Debugging.
    • Mit rr wird es auf macOS wohl nicht laufen.
    • Zum Glück lassen sich lima-VMs remote leicht erstellen.
  • Glückwunsch zum Release. Ihr habt bisher großartige Arbeit geleistet.

    • Im Moment brauche ich es nicht, aber ich werde die Weiterentwicklung alternativer Backends und die Unterstützung zusätzlicher Programmiersprachen im Auge behalten.
    • Danke