16 points par GN⁺ 2025-03-07 | 1 commentaires | Partager sur WhatsApp
  • Débogueur de voyage dans le temps facile à utiliser, prenant en charge divers langages de programmation
    • Enregistre l’exécution du programme pour créer des fichiers de trace autonomes et partageables, et permet d’avancer ou de remonter dans l’exécution dans une interface GUI tout en consultant l’historique de tous les emplacements mémoire
  • Avantages du débogage de voyage dans le temps
    • Résout facilement les bugs difficiles à reproduire : si l’on dispose d’un enregistrement de l’exécution où le bug s’est produit, il est possible d’en identifier la cause en moins de 30 minutes
    • Connaître l’origine d’une valeur facilite la résolution des bugs
      • Lorsqu’une sortie inattendue se produit dans le programme, il est possible de cliquer sur l’événement pour voir immédiatement où le problème est apparu
      • CodeTracer suit l’endroit où cette valeur a été créée afin d’aider à trouver la cause racine du bug en quelques déplacements seulement
      • Il est possible d’explorer librement l’exécution du programme en avançant et en reculant à n’importe quel moment
  • Le traçage utilise un format ouvert, et des projets de prise en charge de langages comme Ruby et Python sont en cours
    • Intégration prévue avec le backend RR pour prendre en charge le débogage de langages de programmation système comme C/C++, Rust, Nim, D, Zig, Go, Fortran et FreePascal

Principales fonctionnalités de CodeTracer

Débogage omniscient (Omniscience)

  • Permet de voir instantanément les valeurs passées et futures des variables à une ligne de code précise pendant l’exécution
  • Permet d’explorer facilement les changements de valeur des variables dans une boucle
  • Distingue clairement le code exécuté du code non exécuté

Tracepoints

  • Permet de voir instantanément les changements de valeur des variables dans le programme sans exécuter de code supplémentaire
  • Facilite l’ajout de conditions, d’appels de fonctions et d’affichages de données pour le débogage

Call Trace

  • Fournit non pas une simple stack trace, mais l’arbre complet des appels de fonctions de toute l’exécution du programme
  • Navigation facile grâce au filtrage et au tri

Exploration de l’état et de l’historique (State and History Explorer)

  • Permet de suivre l’historique des changements de valeur de toutes les variables
  • Permet d’aller immédiatement à l’endroit du code où la valeur d’une variable a changé
  • Suit automatiquement la valeur d’origine des variables copiées pour faciliter l’analyse des bugs

Journal des événements (Event Log)

  • Organise et présente les événements importants du programme dans l’ordre chronologique
  • Un clic sur un événement permet d’aller immédiatement au code correspondant à cet instant

Sortie du terminal (Terminal Output)

  • Reproduit et enregistre les sorties stdout et stderr comme dans un terminal pour permettre de consulter la sortie du programme enregistrée
  • Un clic permet d’aller à l’emplacement exact du code où la sortie a été produite

Navigation à la souris (Mouse Stepping)

  • Permet d’aller immédiatement à une partie précise du code à l’aide de la souris
    • Déplacement par ligne : clic du milieu (Ctrl+clic possible)
    • Entrée dans une fonction : double-clic sur un appel de fonction pour entrer à l’intérieur (Ctrl+Alt+clic possible)
    • Options supplémentaires : fonctionnalités additionnelles accessibles via le menu du clic droit

Scratchpad

  • Permet de figer les valeurs des variables à un instant donné pour les comparer et les analyser
  • Aide à analyser les problèmes en comparant visuellement le flux d’exécution du code

Commandes CLI de CodeTracer

  • ct run <application> - exécute le programme et l’enregistre automatiquement
  • ct record <application> - crée un fichier de trace
  • ct replay - rejoue le fichier de trace créé
  • ct replay <program-name> - charge le dernier enregistrement d’exécution
  • ct replay --id=<trace-id> - exécute avec un ID de trace spécifique
  • ct replay --trace-folder=<trace-folder> - exécute un fichier de trace dans un dossier spécifique
  • ct help / ct --help - affiche les commandes disponibles
  • ct version - affiche la version actuelle

Raccourcis clavier

  • Les raccourcis par défaut sont familiers pour les utilisateurs de Visual Studio™
  • Les fonctions inversées des fonctionnalités de débogage existantes sont fournies avec la touche Shift (F10 = "étape suivante", Shift+F10 = "étape précédente")
  • Il est possible de personnaliser les raccourcis en modifiant le fichier ~/.config/codetracer/.config.yml

1 commentaires

 
GN⁺ 2025-03-07
Commentaires sur Hacker News
  • Impressionnant. Il y a longtemps, j’ai eu l’occasion de faire des demandes de fonctionnalités aux concepteurs de processeurs Intel

    • J’ai demandé un timer de ticks système pour horodater les logs, et ils l’ont implémenté
    • J’ai aussi demandé un masque de bus et un registre de valeur pour déclencher des interruptions de debug, et ils l’ont également implémenté
    • J’ai demandé un historique de la source des sauts, mais cela n’a pas vu le jour
    • À l’époque, Intel vendait des sondes de debug coûteuses qui enregistraient le bus
    • Mon historique des sauts aurait probablement pu supprimer ce besoin pour la plupart des utilisateurs
    • Au final, cela ne s’est pas concrétisé, et nous recompilions le code « debug » pour ajouter du tracing et encore du tracing
  • Le support de Noir a du sens, car les traces d’exécution sont particulièrement précieuses dans les preuves ZK

    • J’attends avec intérêt des implémentations Python et Ruby
    • À cause du caractère dynamique de ces langages, certains bugs peuvent être particulièrement difficiles à trouver
    • Je me demande si quelqu’un ici a déjà utilisé Noir
    • Je suis curieux de connaître le surcoût en performances du mécanisme de tracing
    • Je me demande aussi s’il est prévu de prendre en charge JavaScript/TypeScript pour le développement web
  • Si vous utilisez Clojure ou ClojureScript, je recommande de regarder FlowStorm

  • Noir est un langage spécifique à un domaine pour les systèmes de preuve SNARK

  • Je me demande pourquoi CodeTracer a été écrit en deux langages

  • J’aime vraiment beaucoup. J’ai toujours voulu quelque chose comme ça

    • Je vais probablement le tester plus tard avec Python
    • Ce serait bien d’avoir aussi un support JS/TS
    • Je me demande si le débogueur rr prend en charge macOS, Windows et Android
    • Je me demande aussi à quel point l’enregistrement est lourd pour des applications classiques
    • Ce serait aussi bien que le LLM fournisse du contexte via un serveur MCP, ou qu’on laisse le LLM choisir l’historique des variables qu’il veut voir
    • Une fonction de filtrage des enregistrements serait également utile
  • Ça a l’air sympa, mais sur des systèmes de production, les fichiers de trace vont grossir très vite

    • Je me demande comment associer un fichier à une session donnée
  • Merci de faire vivre l’écosystème Nim

  • Très enthousiaste à ce sujet. J’ai déjà fait un don sur Open Collective

    • L’équipe est remplie de gens talentueux
    • Il y a une superbe interface pour le débogage temporel
    • Avec rr, cela ne pourra pas fonctionner sur macOS
    • Heureusement, les VM lima peuvent être créées facilement à distance
  • Félicitations pour le lancement. Vous avez fait un excellent travail jusqu’ici

    • Je n’en ai pas besoin pour le moment, mais je vais suivre les progrès sur les backends alternatifs et le support d’autres langages de programmation
    • Merci