tracethat.dev

tracethat.dev

Kacper Pietrzak · Coding

Das Funktions-Tracing wird zum Ausgangspunkt für einen JavaScript-Debugger und einen Python-Debugger, die tracethat.dev bietet, einem Werkzeug für Debugging ohne Einrichtung: du umschließt Funktionen in JavaScript, Python oder Go, und das Tool streamt ihre Argumente, Rückgabewerte, Laufzeiten und Fehler an eine Live-Debug-Oberfläche.

Vorschau der Oberfläche von tracethat.dev

Über tracethat.dev

About

Was ist tracethat.dev

tracethat.dev ist ein Open-Source-Tool für Remote-Debugging, das Kacper Pietrzak für Entwickler gebaut hat, die es leid sind, print-Anweisungen über den ganzen Code zu verteilen. Statt eine Wand aus Logs auszugeben und durch irrelevante Ausgaben zu scrollen, umschließt du eine Funktion, und das Tool sammelt die nützlichen Details von selbst ein. Es richtet sich an Teams und an Einzelentwickler, die Code debuggen, der irgendwo läuft, wo sich ein klassischer Debugger schlecht anhängen lässt, etwa auf einem entfernten Server, in einem Container oder in einem Hintergrundjob.

Die Idee dahinter ist einfach. Debuggen per print zwingt dich, vorab zu entscheiden, was protokolliert wird, und den Code jedes Mal neu zu starten, wenn du falsch geraten hast. tracethat.dev dreht das um. Der Reporter erfasst Argumente, Rückgabewerte, Laufzeit, Aufrufstack und jede geworfene Ausnahme, ein einziger Lauf reicht also meist, um das Problem zu finden.

Der Preis dafür ist die Reichweite. Der Go-Reporter kann wegen der Funktionsweise des Typsystems keine beliebigen Funktionen umschließen, Go-Nutzer protokollieren Ereignisse also von Hand. Ereignisse bleiben nur eine Zeit lang auf dem Server, das Tool ist also kein Langzeit-Logarchiv. Und du musst den Reporter selbst in deinen Code einbauen.

Erste Schritte

  1. Gehe auf tracethat.dev und starte eine neue Sitzung. Die Seite erzeugt ein Token, das zugleich als Raum-ID und als Verschlüsselungsschlüssel dient.
  2. Installiere den Reporter für deine Sprache: npm install tracethat.dev, pip install tracethat oder go get github.com/pietrzakacper/tracethat.dev/reporters/golang/tt.
  3. Registriere das Token in deiner App mit registerToken("dein-token") (JavaScript) oder register_token('dein-token') (Python).
  4. Umschließe die Funktion, die du beobachten willst, oder protokolliere ein einzelnes Ereignis mit tracethat.log, und führe dann deinen Code aus.
  5. Sieh zu, wie die Ereignisse in Echtzeit im Browser eintreffen, und klappe sie auf, zu oder filtere sie, um dich aufs Wesentliche zu konzentrieren.

Produktinformationen

Ein kurzer Überblick über Preise, unterstützte Plattformen und die Leistung von tracethat.dev.

Kostenloser TarifJa
Bezahlte TarifeFree
PlattformWeb, JavaScript/TypeScript, Python, Go
EntwicklerKacper Pietrzak
KategorieCoding
VeröffentlichungsdatumDec 2023
Zuletzt aktualisiertJan 2025
Website-BesucheN/A
Globales Website-RankingN/A
API-VerfügbarkeitN/A

Am besten für

Die Nutzer, Aufgaben und Szenarien, für die dieses Tool am besten passt.

Nutzer

  • Backend-Entwickler
  • JavaScript- und TypeScript-Entwickler
  • Python-Entwickler

Aufgaben

  • Eine Funktion debuggen, die du lokal nicht reproduzierst
  • Langsame Codepfade messen
  • Stille Ausnahmen abfangen

Szenarien

  • Ein Hintergrundjob auf einem Staging-Server wirft einen Fehler, den du auf deinem Laptop nicht reproduzierst; umschließt du den fehlschlagenden Schritt, gehen die echten Eingaben direkt in deinen Browser.
  • Eine Web-App verhält sich nur in Produktion falsch; der Reporter per `script`-Tag fügt sich in dein HTML ein und streamt ohne Build-Schritt.
  • Du debuggst zu zweit oder bittest einen Kollegen um Hilfe; teilst du das Sitzungs-Token, sehen beide denselben Stream live.

Wichtigste Funktionen

Funktions-Tracing in einer Zeile

Der zentrale Griff des Reporters ist das Umschließen einer Funktion, sodass jeder Aufruf als Tracing-Ereignis festgehalten wird. Damit verhält sich der Reporter zugleich wie ein JavaScript-Debugger für Browser und Node.js und wie ein Python-Debugger für Skripte, die keinen klassischen Debugger erreichen. In JavaScript schreibst du traceThat(hello)("world") und das Tool greift die Argumente, den Rückgabewert, die Dauer des Aufrufs, den Aufrufstack und jede geworfene Ausnahme ab. Python nutzt dieselbe Idee über einen @tracethat-Dekorator. Das alles bekommst du, ohne eine einzige print-Anweisung zu schreiben.

Live gestreamte Weboberfläche

Die Ereignisse warten nicht auf ein Neuladen. Der Webclient hält einen Socket zum Server und schiebt jedes neue Ereignis in deinen Raum, sobald es auftritt. Du kannst einen Aufruf aufklappen, um alle Details zu sehen, unwichtige zuklappen und nach bestimmten Werten filtern. Sie ist darauf ausgelegt, eine fokussierte Ereignisliste zu lesen statt einen Scroll-Puffer.

Token-basierte Verschlüsselung

Dein Token hat eine Doppelfunktion: Raumnummer und Verschlüsselungsschlüssel. Der Reporter verschlüsselt jedes Ereignis, bevor es deine App verlässt, und der Webclient kann die Ereignisse nur entschlüsseln, wenn du ihm dasselbe Token gibst. Der Raum wird über den SHA-256-Hash des Tokens bestimmt, der Server übergibt deiner Sitzung also nur die für sie bestimmten Ereignisse.

Reporter für mehrere Sprachen

Es gibt Reporter für JavaScript/TypeScript, Python und Go. Der JS-Reporter wird über npm installiert und lässt sich auch über ein einfaches script-Tag einbinden, was ohne Build-Pipeline hilfreich ist. Python kommt über PyPI. Go kommt direkt von GitHub. Alle sprechen mit demselben Server und derselben Oberfläche, ein gemischter Stack landet also an einem Ort.

Manuelles Protokollieren von Ereignissen

Wenn du nicht eine ganze Funktion umschließen willst, setzt du eine Markierung an einer einzelnen Stelle. tracethat.log('hello function started') hält ein Ereignis fest, und du kannst zusätzliche Daten mitgeben. Das ist die erste Wahl für Go, dessen Reporter keine Funktionen generisch umschließen kann, und für alle, die nur einen Prüfpunkt zwischen zwei Zeilen wollen.

In-Memory-Server mit automatischer Bereinigung

Der Server hält die Ereignisse im Speicher, statt sie auf dauerhaften Speicher zu schreiben, und löscht sie nach einer Weile. Das hält die Einrichtung schlank, und es bleibt kein Log zum Verwalten übrig. Es bedeutet zugleich, dass die Ereignisse fürs Live-Debugging gedacht sind, nicht zum Nachschauen, was letzte Woche passiert ist.

Vor- und Nachteile

Vorteile

  • Keine Einrichtung außer dem Einbau des Reporters: du konfigurierst keinen Agenten, keinen Collector und keinen Speicher.
  • Erfasste Daten sind breiter als `print`-Anweisungen und decken Argumente, Rückgabewerte, Laufzeiten, Aufrufstacks und Ausnahmen in einem Durchgang ab.
  • Die Live-Oberfläche mit Filtern und Aufklappen/Zuklappen macht einen Lauf deutlich lesbarer als rohe Logs.
  • Open Source unter der MIT-Lizenz, du kannst den Code lesen, selbst hosten oder beitragen.
  • Läuft mit JavaScript, Python und Go, was zu Teams mit gemischtem Backend passt.

Nachteile

  • Der Go-Reporter kann keine beliebigen Funktionen umschließen, Go-Nutzer protokollieren Ereignisse also von Hand, was mehr Handarbeit bedeutet als in JS oder Python.
  • Ereignisse liegen im Speicher und werden nach einer Weile gelöscht, du kannst es also nicht als dauerhaftes Log für die Nachanalyse eines Vorfalls nutzen.
  • Du musst trotzdem deinen Quellcode ändern, um den Reporter einzubauen, es ist also nicht berührungsfrei für Apps, die du nicht bearbeiten kannst.
  • Es ist ein kleines Projekt mit einem einzigen Maintainer und bescheidener Nutzerbasis, die Community-Unterstützung ist also dünner als bei einer großen kommerziellen Plattform, und Sonderfälle musst du womöglich selbst lösen.

Häufige Fragen

Es ist ein Remote-Debugging-Tool, um zu sehen, was eine laufende App tatsächlich tut. Du umschließt Funktionen, und das Tool streamt ihre Argumente, Rückgabewerte, Laufzeiten und Fehler in eine Browser-Oberfläche, so lässt sich Code debuggen, der mit einem normalen Debugger schwer erreichbar ist.