tracethat.dev

tracethat.dev

Kacper Pietrzak · Programmation

Le traçage de fonctions est au cœur de tracethat.dev, un outil de débogage à distance sans configuration : vous enveloppez des fonctions en JavaScript, Python ou Go, et l'outil envoie leurs arguments, leurs valeurs de retour, leurs durées et leurs erreurs vers une interface de débogage en direct.

Aperçu de l'interface de tracethat.dev

À propos de tracethat.dev

About

Qu'est-ce que tracethat.dev

tracethat.dev est un outil de débogage à distance open source créé par Kacper Pietrzak pour les développeurs fatigués de disperser des print dans leur code. Au lieu d'afficher un mur de logs et de faire défiler une sortie qui n'a rien à voir, vous enveloppez une fonction et l'outil récupère tout seul les détails utiles. Il vise les équipes et les développeurs qui travaillent seuls et déboguent du code qui tourne là où il est difficile d'accrocher un débogueur classique, comme un serveur distant, un conteneur ou une tâche en arrière-plan.

L'idée derrière est simple. Le débogage par print vous oblige à décider à l'avance quoi journaliser, puis à relancer le code chaque fois que vous vous trompez. tracethat.dev inverse cela. Le reporter capture les arguments, les valeurs de retour, le temps d'exécution, la pile d'appels et toute exception levée, si bien qu'une seule exécution suffit souvent à trouver le problème.

Le revers de la médaille, c'est la portée. Le reporter Go ne peut pas envelopper des fonctions arbitraires à cause du fonctionnement de son système de types, donc les utilisateurs de Go journalisent les événements à la main. Les événements ne vivent sur le serveur qu'un temps limité, ce n'est donc pas une archive de logs à long terme. Et vous devez quand même ajouter le reporter à votre code vous-même.

Pour commencer

  1. Rendez-vous sur tracethat.dev et démarrez une nouvelle session. Le site génère un jeton qui sert à la fois d'identifiant de salle et de clé de chiffrement.
  2. Installez le reporter de votre langage : npm install tracethat.dev, pip install tracethat ou go get github.com/pietrzakacper/tracethat.dev/reporters/golang/tt.
  3. Enregistrez le jeton dans votre application avec registerToken("votre-jeton") (JavaScript) ou register_token('votre-jeton') (Python).
  4. Enveloppez la fonction que vous voulez surveiller, ou journalisez un événement isolé avec tracethat.log, puis lancez votre code.
  5. Regardez les événements arriver dans le navigateur en temps réel, puis développez, repliez ou filtrez pour vous concentrer sur l'essentiel.

Informations sur le produit

Aperçu des tarifs, des plateformes compatibles et des performances de tracethat.dev.

Offre gratuiteOui
Offres payantesFree
PlateformeWeb, JavaScript/TypeScript, Python, Go
DéveloppeurKacper Pietrzak
CatégorieProgrammation
Date de lancementDec 2023
Dernière mise à jourJan 2025
Visites du siteN/A
Classement mondial du siteN/A
Disponibilité de l’APIN/A

Idéal pour

Les utilisateurs, tâches et cas d'usage où cet outil convient le mieux.

Utilisateurs

  • Développeurs backend
  • Développeurs JavaScript et TypeScript
  • Développeurs Python

Tâches

  • Déboguer une fonction que vous ne parvenez pas à reproduire en local
  • Mesurer des chemins de code lents
  • Attraper les exceptions silencieuses

Cas d'usage

  • Une tâche en arrière-plan sur un serveur de préproduction lève une erreur que vous ne reproduisez pas sur votre portable ; envelopper l'étape qui échoue envoie les entrées réelles directement dans votre navigateur.
  • Une application web ne se comporte mal qu'en production ; le reporter par balise `script` s'insère dans votre HTML et commence à diffuser sans étape de build.
  • Vous déboguez en binôme ou vous demandez de l'aide à un collègue ; partager le jeton de session permet à vous deux de suivre le même flux en direct.

Fonctionnalités clés

Traçage de fonction en une ligne

Le traçage de fonctions tient en une ligne, le geste central du reporter consiste à envelopper une fonction pour que chaque appel soit enregistré comme événement de traçage. En JavaScript, vous écrivez traceThat(hello)("world") et l'outil récupère les arguments, la valeur de retour, la durée de l'appel, la pile d'appels et toute exception levée. Python reprend la même idée avec un décorateur @tracethat. Vous obtenez tout cela sans écrire un seul print.

Interface web diffusée en direct

Les événements n'attendent pas que vous rafraîchissiez. Le client web maintient une socket avec le serveur et pousse chaque nouvel événement dans votre salle au fur et à mesure. Vous pouvez développer un appel pour voir tous ses détails, replier ceux qui ne vous intéressent pas et filtrer par valeurs précises. Il est conçu pour lire une liste ciblée d'événements plutôt qu'un tampon de défilement.

Chiffrement par jeton

Votre jeton joue un double rôle : identifiant de salle et clé de chiffrement. Le reporter chiffre chaque événement avant qu'il ne quitte votre application, et le client web ne peut déchiffrer les événements que si vous lui donnez le même jeton. La salle est identifiée par le hachage SHA-256 du jeton, si bien que le serveur ne transmet à votre session que les événements qui lui sont destinés.

Reporters pour plusieurs langages

Il existe des reporters pour JavaScript/TypeScript, Python et Go. Celui de JS s'installe depuis npm et peut aussi tourner depuis une simple balise script, ce qui est pratique sans pipeline de build. Python s'installe depuis PyPI. Go s'installe directement depuis GitHub. Tous parlent au même serveur et à la même interface, donc une stack mixte aboutit au même endroit.

Journalisation manuelle d'événements

Quand vous ne voulez pas envelopper une fonction entière, vous pouvez poser un marqueur à un seul endroit. tracethat.log('hello function started') enregistre un événement, et vous pouvez y joindre des données supplémentaires. C'est l'option de choix pour Go, dont le reporter ne peut pas envelopper les fonctions de façon générique, et pour qui veut simplement un point de contrôle entre deux lignes.

Serveur en mémoire avec nettoyage automatique

Le serveur garde les événements en mémoire plutôt que de les écrire sur un stockage durable, puis les efface au bout d'un moment. Cela garde l'installation légère et évite qu'un log traîne à gérer. Cela veut aussi dire que les événements servent au débogage en direct, pas à revoir ce qui s'est passé la semaine dernière.

Avantages et inconvénients

Avantages

  • Aucune configuration hormis l'ajout du reporter : vous ne montez ni agent, ni collecteur, ni stockage.
  • Les données capturées sont plus larges que les `print` et couvrent arguments, valeurs de retour, durées, piles d'appels et exceptions en une seule passe.
  • L'interface en direct avec filtres et développé/replié rend une exécution bien plus lisible que des logs bruts.
  • Open source sous licence MIT, vous pouvez donc lire le code, l'héberger vous-même ou contribuer.
  • Fonctionne avec JavaScript, Python et Go, ce qui convient aux équipes au backend mixte.

Inconvénients

  • Le reporter Go ne peut pas envelopper de fonctions arbitraires, donc les utilisateurs de Go journalisent à la main, ce qui demande plus de travail manuel qu'en JS ou Python.
  • Les événements sont gardés en mémoire et effacés au bout d'un moment, vous ne pouvez donc pas le traiter comme un log durable pour revoir un incident passé.
  • Vous devez quand même modifier votre code source pour ajouter le reporter, ce n'est donc pas sans intervention pour les applications que vous ne pouvez pas éditer.
  • C'est un petit projet, tenu par une seule personne et avec une base d'utilisateurs modeste, donc le soutien de la communauté est plus mince que sur une grande plateforme commerciale, et vous finirez peut-être par régler les cas limites vous-même.

Questions fréquentes

C'est un outil de débogage à distance pour observer ce que fait réellement une application en cours d'exécution. Vous enveloppez des fonctions et l'outil envoie leurs arguments, leurs valeurs de retour, leurs durées et leurs erreurs vers une interface navigateur, ce qui permet de déboguer du code difficile à atteindre avec un débogueur classique.