HN présente : un adolescent de 17 ans a consacré six mois au développement d’un débogueur C
(github.com/d4ckard)Présentation du débogueur Spray
- Spray est un débogueur simple et facile à comprendre pour le code C.
- Il permet de contrôler l’exécution d’un programme en cours et d’inspecter ou modifier son état.
- Son développement a commencé pour explorer le fonctionnement interne des débogueurs et chercher des moyens de rendre le débogage plus accessible.
Fonctionnalités principales
- Définition de points d’arrêt sur des fonctions, des lignes dans un fichier ou des adresses.
- Affichage et modification des valeurs de variables, d’adresses mémoire et de registres.
- Coloration syntaxique C, backtrace, exécution pas à pas.
- Fonction de filtre pour spécifier le format de sortie des commandes.
Feuille de route
- Affichage et modification de structures complexes.
- Coloration syntaxique pour les structures complexes.
- Backtrace basé sur DWARF plutôt que sur le frame pointer.
- Fonctions inline, chargement de bibliothèques externes, capture des signaux envoyés au programme en cours de débogage.
Installation
- Une partie du frontend de Spray est écrite en Scheme et compilée en C via CHICKEN Scheme.
- L’installation de CHICKEN est nécessaire, et comme il y a une dépendance à libdwarf, il faut l’installer d’abord.
- Clonez le dépôt et installez Spray avec la commande
make. - Ajoutez-le au
$PATHpour pouvoir l’utiliser comme une commande classique.
Utilisation de Spray
- Les informations de débogage doivent être activées sur le binaire à déboguer, et les optimisations doivent être désactivées.
- Le programme doit être compilé avec Clang.
- Passez en premier argument le nom du binaire à déboguer, puis les arguments du programme à déboguer.
Commandes
Lecture et écriture de valeurs
- Affichez ou définissez la valeur de variables, registres et adresses.
- Les noms de registres utilisent le préfixe
%conformément à la syntaxe assembleur AT&T. - Les valeurs peuvent être indiquées en décimal ou en hexadécimal.
Points d’arrêt
- Définition et suppression de points d’arrêt sur des fonctions, des lignes dans un fichier ou des adresses.
- La commande
continuepermet de reprendre l’exécution jusqu’au prochain point d’arrêt.
Exécution pas à pas
- Aller à la ligne suivante, entrer dans une fonction ou sortir de la fonction courante.
- Aller à l’instruction suivante, afficher la backtrace à la position actuelle.
Filtres
- Il est possible d’utiliser des filtres pour modifier le format de sortie.
- Ajoutez un filtre après les commandes
printetsetpour changer le format d’affichage.
Comment contribuer
- Toutes les contributions sont les bienvenues ; avant une pull request, exécutez la suite de tests en local pour vérifier qu’aucune fonctionnalité n’a été cassée.
- Les échecs de tests dus à une erreur de type off-by-one sur certaines valeurs peuvent être ignorés.
Références
- La série d’articles de blog de Sy Brand « Writing a Linux Debugger », la norme DWARF 5, la documentation de libdwarf et l’article d’Eli Bendersky « How debuggers work ».
Avis de GN⁺
Le point le plus important ici est que Spray est un débogueur convivial pour le code C, centré sur l’idée de rendre le débogage plus accessible. Son approche, avec une structure et des commandes faciles à comprendre même pour un ingénieur logiciel débutant, est attrayante car elle aide à simplifier des tâches de débogage complexes. De plus, la feuille de route et les modalités de contribution sont clairement présentées, ce qui en fait une opportunité intéressante pour les développeurs souhaitant participer à un projet open source.
1 commentaires
Avis Hacker News
Le code de ce jeune programmeur est particulièrement propre, cohérent et bien modularisé. Ce genre de projet exige des connaissances peu courantes sur les formats binaires et les API du noyau. Même de nombreux programmeurs « avancés » pourraient avoir du mal à construire quelque chose comme ça, ne serait-ce qu’au niveau conceptuel.
Lire le code de jeunes programmeurs est intéressant. Ils manquent d’expérience, mais on peut les voir concevoir avec un niveau de connaissances déjà considérable. L’auteur semble apprendre vite, et le résultat de six mois de travail est excellent.
J’admire ce niveau d’engagement. Je recommanderais de participer à des programmes comme Google Summer of Code, KDE Season of Code, Linux Foundation LFX ou X.org EVoC. Il y a beaucoup de problèmes intéressants à explorer. J’aurais aimé connaître ce genre de programme quand j’étais étudiant. Maintenant, j’ai un emploi à temps plein et je n’ai plus le temps de contribuer à l’open source.
Au premier coup d’œil, le projet est bien organisé. C’est louable.
Félicitations pour le projet, et bonne chance pour la suite. Les compilateurs ont été l’un des premiers sujets qui m’ont donné envie de m’intéresser à l’informatique.
Cela montre que les jeunes de 17 ans connaissent encore les CD. L’icône de sauvegarde en disquette n’est peut-être pas encore totalement dépassée.
Les connaissances et la maturité montrées à 17 ans sont impressionnantes. Les sujets étudiés et mis en pratique sont de niveau universitaire, et ce projet relèverait d’un cursus de niveau master. Je lui souhaite une carrière pleine de réussite.
Je me souviens avoir écrit une bibliothèque graphique 2D en Turbo Pascal quand j’étais jeune. C’était avant que je découvre Internet, donc ça en est resté au plaisir personnel, mais je pense qu’il a bien fait de créer quelque chose que d’autres peuvent voir. Le code est propre, bien commenté, et le README est clair.
Créer un tutoriel « écrire un débogueur » en parallèle du projet serait peut-être fastidieux, mais très utile.
Je me demande pourquoi il y a un espace entre le nom des fonctions et leurs arguments. Après 18 ans à lire du code C, cela me paraît un peu inhabituel.