-
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
Commentaires Hacker News