1 points par GN⁺ 2024-07-22 | 1 commentaires | Partager sur WhatsApp
  • Présentation de rr

    • rr est un outil de débogage C/C++ sous Linux, conçu pour compléter gdb
    • Il permet d’enregistrer un échec une seule fois, puis de le déboguer de manière répétée à partir de cet enregistrement
    • Le débogage est possible en reproduisant exactement la même exécution à chaque fois
    • Il offre une exécution arrière efficace via gdb
  • Fonctionnalités de rr

    • Faible surcoût
    • Prise en charge de l’enregistrement et de la relecture de diverses applications (Firefox, Chrome, QEMU, LibreOffice, etc.)
    • Possibilité d’enregistrer, de rejouer et de déboguer des charges de travail multiprocessus
    • Prise en charge du scripting gdb et de l’intégration aux IDE
    • Fichiers de trace durables et compressés, transférables d’une machine à l’autre
    • Mode chaos pour reproduire des bugs intermittents
  • Expérience de débogage avec rr

    • Enregistrer une application : rr record /your/application --args...
    • Déboguer une exécution enregistrée : rr replay
    • Débogage déterministe d’une trace enregistrée
    • Utilisation possible des commandes gdb habituelles
    • L’exécution arrière permet de revenir rapidement jusqu’au point du problème
  • Vidéos

    • Vidéo de démonstration de l’enregistrement et de la relecture de Firefox
    • Vidéo expliquant en détail les fonctionnalités de base de rr
    • Vidéo d’une présentation technique avancée de Robert O'Callahan
  • Pour commencer

    • Compilation depuis les sources : recommandée si les paquets ne fonctionnent pas
    • Méthodes d’installation fournies pour Fedora et Ubuntu
  • Contexte et motivation

    • Développé pour simplifier le débogage des échecs intermittents
    • La relecture déterministe garantit que les informations obtenues pendant le débogage restent valides
    • L’exécution arrière facilite davantage le processus de débogage
    • rr est utilisé régulièrement dans de nombreux projets, petits et grands
  • Fonctionnement de rr

    • Enregistre les processus en espace utilisateur Linux et capture toutes les entrées provenant du noyau
    • Lors de la relecture, garantit le flux de contrôle au niveau des instructions, ainsi que le contenu mémoire et celui des registres
    • La disposition mémoire, les adresses des objets, les valeurs des registres, etc. restent identiques
    • Devient encore plus puissant lorsqu’il est utilisé avec des fuzzers et des injecteurs de pannes aléatoires
  • Le contexte de rr

    • Le débogage par enregistrement et relecture est une idée ancienne
    • Objectifs de conception centrés sur Firefox
    • Déployabilité : fonctionne sur un noyau Linux standard, sans modification de la configuration système
    • Faible surcoût à l’exécution
    • Conception simple : évite les techniques complexes
  • Limitations

    • Émule une machine monocœur
    • Impossible d’enregistrer des processus qui partagent la mémoire avec l’extérieur de l’arbre des processus enregistrés
    • Nécessite un CPU x86 moderne ou certains CPU ARM spécifiques
    • Nécessite la connaissance de tous les appels système exécutés par les processus enregistrés
    • Doit s’adapter aux changements du noyau, aux mises à jour des bibliothèques système et aux nouvelles familles de CPU
  • Références supplémentaires

    • Rapport technique étendu
    • Wiki rr
    • Questions possibles sur la mailing list ou dans #rr sur chat.mozilla.org

Résumé de GN⁺

  • rr est un outil puissant pour le débogage C/C++ sous Linux, qui améliore fortement l’efficacité grâce à la relecture déterministe
  • Il prend en charge diverses applications et des charges de travail multiprocessus, tout en restant pratique grâce à son faible surcoût
  • Sa fonction d’exécution arrière facilite encore davantage le processus de débogage
  • Il est utile de manière générale, y compris pour déboguer des applications complexes comme Firefox
  • Parmi les outils aux fonctionnalités similaires figurent gdb et Valgrind

1 commentaires

 
GN⁺ 2024-07-22
Commentaires Hacker News
  • GDB fournit déjà une fonctionnalité de débogage inverse
  • rr offre davantage de fonctionnalités et de flexibilité
  • rr a été utilisé avec succès pour faire de l’ingénierie inverse sur de grandes bases de code
  • Le débogueur nécessite une liste des symboles et une compréhension des appels système
  • On se demande si rr fonctionne aussi avec des langages comme Rust, Zig, Odin et Nim
  • Cela ne fonctionnerait probablement pas avec des langages à mémoire managée comme Python, JS et C#
  • Il y avait un projet qui tentait un portage en Rust, mais il a été abandonné
  • Une étude comparative sur l’impact et les avantages d’une réécriture de C++ vers Rust serait intéressante
  • rr est très utile, mais il échoue souvent à reproduire les bugs de concurrence
  • Il serait très utile que certains langages intègrent directement rr dans leurs outils
  • Le débogage C/C++ avec rr est très puissant et améliore considérablement le processus de débogage
  • Pernosco s’appuie sur rr et y ajoute une base de données interrogeable de l’exécution complète du programme
    • Si l’on clique sur une valeur erronée, il explique immédiatement d’où elle vient
    • On peut demander au débogueur ce qui s’est réellement passé sans avoir à comprendre le code
  • On se demande s’il peut aussi être utilisé quand du code C/C++ est compilé en dll/so appelé depuis Python
  • On se demande si les problèmes de rr liés aux CPU Ryzen ont été résolus