HN : Spray — un débogueur C développé pendant 6 mois par un jeune de 17 ans
(github.com/d4ckard)- Spray est un petit débogueur pour le code C : un outil qui garde ses fonctionnalités simples et faciles à comprendre pour contrôler un programme en cours d’exécution et inspecter ou modifier son état
- Les fonctionnalités prises en charge incluent des points d’arrêt par fonction, ligne de fichier ou adresse, l’affichage et la définition de variables, de mémoire à une adresse et de registres, la coloration syntaxique C, la pile d’appels, le pas-à-pas par instruction, fonction ou ligne, ainsi que des filtres de formatage pour la sortie des commandes
- Les commandes du REPL sont
print/set,break/delete,continue,next,step,leave,inst,backtrace, et servent à contrôler l’exécution ainsi qu’à lire et écrire des valeurs - Après
printetset, on peut ajouter des filtres avec un pipe (|) ;dec,hex,addr,bits,bytes,deref/*permettent d’afficher la même valeur 64 bits sous différents formats ou de déréférencer une adresse - La compilation nécessite CHICKEN Scheme et libdwarf ; après avoir cloné le dépôt avec ses sous-modules, exécuter
makegénère le binairespraydans le répertoirebuild - Le binaire à déboguer doit être compilé avec l’option
-gafin d’inclure les informations de débogage, et il est préférable de désactiver les optimisations pour obtenir la meilleure sortie - Spray n’a été testé qu’avec Clang ; comme chaque compilateur génère différemment les informations de débogage pour un même code, les programmes à déboguer avec Spray doivent être compilés avec
clang - La feuille de route comprend encore l’affichage et la modification de structures complexes, la coloration syntaxique des structures complexes, les piles d’appels basées sur DWARF plutôt que sur les frame pointers, les fonctions inline, le chargement de bibliothèques externes et la capture des signaux envoyés au programme débogué
1 commentaires
Avis Hacker News
Particulièrement propre, cohérent et bien modularisé, tout en s’attaquant à un problème qui demande une connaissance assez approfondie des formats binaires et des API du noyau
Beaucoup de programmeurs « seniors » auraient du mal à construire ce genre de chose, même au niveau conceptuel ; c’est tout l’inverse du cliché « les jeunes d’aujourd’hui… »
Je me demande comment, à 17 ans, on acquiert un tel niveau de connaissance. Des livres, des pairs, un club de programmation, des parents programmeurs ?
Avec une pure curiosité, le gros prérequis d’avoir « simplement accès » au matériel nécessaire, et quelques livres et magazines, on peut déjà aller assez loin
Mes parents n’étaient pas programmeurs, mais mon père a acheté un ordinateur assez tôt, en 1984, puis plus tard il a rapporté à la maison, via son travail, des compilateurs comme TurboPascal et C++ pour me laisser expérimenter
J’ai surtout appris avec des magazines et des livres, puis j’ai eu quelques échanges avec des gens de mon âge dans la demoscene, et j’achetais aussi par courrier des disques contenant de la documentation (https://fr.wikipedia.org/wiki/DP_Tool_Club). Par exemple des ressources comme https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List
J’ai procédé par itérations progressives en construisant de petites choses : une boîte à outils de fenêtrage pour CGA, un clone de Tetris, un clone de Bomberman, un logiciel de FFT, jusqu’à finir par faire du rendu 3D temps réel comme du rendu Phong entièrement logiciel, sans FPU (https://github.com/thbar/demomaking#obez-1995)
Dans le monde de la demoscene, je suis tombé sur d’autres ados qui faisaient la même chose, donc je n’étais pas un cas particulier totalement isolé
Aujourd’hui, je pense qu’un enfant curieux peut aller beaucoup plus loin, à condition que cette curiosité soit bien encouragée
Et tu as vu juste : mon père est informaticien
Certains gamins sont vraiment incroyables. Moi, à cet âge-là, j’ai pleuré de frustration en apprenant le C++
Super. J’aurais aimé avoir ce niveau de dévouement quand j’étais jeune
Je te recommande de tenter des programmes comme Google Summer of Code, KDE Season of Code, Linux Foundation LFX, X.org EVoC
Il y a beaucoup de problèmes intéressants à résoudre. J’aurais aimé connaître ça quand j’étais étudiant ; maintenant je travaille à temps plein et je n’ai plus le temps de contribuer à l’open source
Continue comme ça
J’ai parcouru rapidement le projet pour la première fois et il a l’air bien organisé. Excellent travail
Je me demande depuis combien de temps tu programmes et par quel langage tu as commencé. Je connais pas mal de développeurs de plusieurs décennies plus âgés qui ne savent toujours pas utiliser un Makefile[1]
Je me demande aussi quelle est l’intention derrière les émojis inline dans le code source. Est-ce que tous les jeunes cool font ça, ou est-ce pour forcer à penser aux entrées non ASCII ?
[1] : Il y en a encore plus qui n’utilisent pas ou ne comprennent pas les cibles générées dynamiquement
Les émojis, c’était une sorte de blague que j’ai faite pendant environ une semaine. J’ai l’impression d’en voir beaucoup plus souvent côté Rust. Je ne les ai simplement pas supprimés
Je trouve l’émoji insecte autour du PID amusant. Ceux dans les commentaires disparaîtront peut-être un jour. Cela dit, je n’ai eu aucun problème d’éditeur jusqu’ici : Helix, Emacs et VSCode fonctionnent tous bien
Je me demande si, quand les couleurs du terminal sont désactivées, je devrais aussi désactiver l’affichage d’émojis sur la sortie standard dans le REPL
Félicitations, et bonne chance pour tes projets
Les compilateurs ont été l’un des premiers terriers de lapin qui m’ont fait m’intéresser à l’informatique
L’un des livres que j’ai lus et relus d’innombrables fois est désormais disponible gratuitement ; même s’il traite de compilateurs plutôt que de débogage, il pourrait mériter une place dans ta liste de lectures
« Compiler Design in C »
https://holub.com/compiler/
C’est un livre un peu ancien, mais il pourrait t’intéresser
Malheureusement, beaucoup sont trop tour d’ivoire
Un tel niveau de connaissances et de maturité à 17 ans, c’est très impressionnant
Les sujets abordés et expérimentés correspondent à ce qu’on attendrait au niveau licence, et même là, ce projet se rapproche plutôt du niveau d’un cours de master
Respect, et je te souhaite une belle carrière
Dans quelques années, il sera encore un jeune passionné de tech, et il y a de bonnes chances qu’il réalise alors des projets encore plus impressionnants
À ce moment-là, on ne saura peut-être plus très bien à quel point il était en avance à cet âge. Il y a des gens brillants qui commencent à faire des choses impressionnantes dans la vingtaine, et au même âge, la plupart des observateurs le verront comme un pair
Mais cette avance initiale peut rester un avantage injuste qu’il pourra conserver
Dans des années ou des décennies, elle pourra se révéler comme une sorte d’« arme secrète »
J’aime lire le code de jeunes programmeurs. C’est intéressant de voir comment ils conçoivent l’ensemble quand ils ont déjà un niveau de connaissances assez élevé, mais pas encore des années d’expérience
L’auteur semble être quelqu’un qui apprend vite, et pour six mois de travail, c’est excellent
On dirait que les jeunes de 17 ans savent encore ce qu’est un CD
L’icône de sauvegarde en forme de disquette n’a peut-être pas encore besoin d’être mise au rebut :P
Sympa. Quand j’avais son âge, je me souviens avoir créé une bibliothèque graphique 2D en Turbo Pascal, avec du code de rendu réel optimisé à la main en assembleur inséré dedans
Mais c’était avant que je découvre Internet : c’était amusant à faire, mais c’est resté un projet personnel que personne n’a jamais utilisé
C’est formidable d’être allé jusqu’à l’étape suivante : transformer un projet personnel en quelque chose que d’autres peuvent voir et peut-être utiliser eux-mêmes. Dans l’ensemble, c’est très bien rangé, bien commenté, et le README est clair
Le publier au monde peut faire peur, mais il faut se rappeler que ce que les gens disent, surtout quand ils parlent de toi, en dit autant sur eux que sur ton travail
Cela dit, je suis en fait plus intéressé par Motes que par ce projet, donc je vais l’essayer maintenant :)
Le plugin Emacs peut avoir des comportements étranges. Cela dit, les scripts ont parfaitement fonctionné pour moi ces dernières semaines
J’espère que ça te plaira :D
Super
Je vais cloner le code ce soir et y jeter un œil
Comme nos centres d’intérêt se recoupent, je vais essayer de contribuer à ce projet
J’ai laissé des commentaires à la plupart des endroits, mais je ne sais pas s’ils seront tous utiles
Les débogueurs sont particulièrement difficiles à écrire, et celui-ci est plutôt bon