[HN Gopher] Show HN: I spent 6 months building a C debugger as a... ___________________________________________________________________ Show HN: I spent 6 months building a C debugger as a 17-year-old Hey HN my name is Thassilo, I'm a student and passionate programmer from Germany. I want to showcase Spray, a small C debugger I've been working on for a few months now. Spray has a very simple and approachable interface. Its feature set is limited at this point, but it's already enough to tackle some basic problems. I stared to work on Spray because I was curious about how debuggers work. I am also trying to design Spray in such a way that it's easy to grasp and has a small mental overhead. I'd love to get your feedback on Spray. Email: d4kd (at) proton (dot) me PS: I'm generally interested compilers and language tool chains, and I'm looking for similar-minded people to work and collaborate with. I have a few similar projects on my GitHub: https://github.com/d4ckard?tab=repositories. If you find Spray interesting, you might enjoy playing around with them too. Author : D4ckard Score : 270 points Date : 2023-11-11 13:59 UTC (9 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | gumby wrote: | Debuggers are particularly tricky to write so this is quite good! | D4ckard wrote: | Thanks, it's been quite a struggle at times : D | gumby wrote: | Yeah, I started working on a pre-existing debugger around the | same age as you (this was the ITS debugger DDT, so 40+ years | ago) and boy, it was full of puzzling counterintuitive stuff. | | And it was just an assembly debugger so minimal debugging | symbols. Merely reading some DWARF data is impressive enough. | DWARF makes sense to me but that's only because I worked with | other debugging formats and compiler output of same, before | and during the evolution of DWARF. I can imagine it's hard to | understand when you start cold with DWARF 5. | D4ckard wrote: | DWARF 5 is truly ... special. My mind was blown when I | understood that half of its data is encoded as instructions | for full-blown stack-based VM. | IamDaedalus wrote: | GGs dude I'm cloning the code and looking through tonight We | share similar interests and I will try to make contributions to | your project | D4ckard wrote: | Wow, this sounds great. Please hit me up at any time if you | have questions about the code. I left behind comments most | places, but I don't know if all of them are helpful. | smithza wrote: | I want to only comment that your level of knowledge and maturity | at the age of 17 is very impressive. The topics being | investigated and exploited are expected at an undergraduate level | and even then, this project would be in the Graduate level | course. My hat is off to you and wish you a successful career. | fuzzfactor wrote: | I'm impressed too, this is an excellent head start. | | Years later as a still-young technology enthusiast it would be | likely that even more impressive projects will be accomplished. | By then it may be largely unknown how advanced this was at this | young of an age. Simply because there will be other sharp minds | that do impressive stuff but only got started in their 20's, | and reaching the same age they would be considered by most | observers as peers. | | But this head start will be an unfair advantage that can be | made to last forever anyway. | | Even if it does turn out to be kind of like a "secret weapon" | after a number of years or decades. | superduty wrote: | Why is the advantage of early learning and understanding | "unfair"? | thelock85 wrote: | I read it in a "first to market" unfair advantage type of | way, not ethically unfair. Of course, there are larger | societal questions around access to early learning | opportunities but I didn't read into it that way. | jacknews wrote: | Very well done, and I hope you build this out further, but please | leave out the 'as a 17 yo'. I really don't think it's relevant | and risks coming across as cloying - your work should (and does) | stand on it's own. | raarts wrote: | As a (former) employer I definitely think his age is relevant. | jacknews wrote: | It's maybe relevant on a CV, not so on HN, which is for 'look | at this', not 'look at me'. | InCityDreams wrote: | ...remembering what i was doing at 17, it's relevant to | myself, and i reckon future employers and also education | establishments may find it relevant. | raarts wrote: | So you think employers don't look on HN? | SushiHippie wrote: | I think it's okay, otherwise this wouldn't have landed on | the front page (less likely at least). And it's only on HN | and not on the GitHub repo. If it would be stated on | GitHub, I'd agree with you. | ricardobeat wrote: | It could have easily landed on the home page without the | age mention. There are 10-20k links on the front page | every year. | cinntaile wrote: | Editorialized headlines are against HN guidelines. | flykespice wrote: | Judging your candidate by age than skill is what perpetuates | the gross ageism on the IT sector. | | Gladly you got demoted from the position | 29athrowaway wrote: | It is an achievement that requires courage, specialization and | training... the latter require time and focus. | | This guy did it at an early age, showing great promise for the | years to come. | brynbryn wrote: | I disagree about the age. It provides context, and provides | inspiration to others. I think he has done a fantastic thing | and we don't need to be negative for the sake of being negative | ricardobeat wrote: | You're right about the inspirational aspect, but when | highlighted by the author themselves it does feel a bit | unnecessary, and it detracts from the project. Half of the | comments are on the subject of age. | schleck8 wrote: | Please include the 17 yo part, I think it's very interesting. | white_beach wrote: | at least it is open source unlike some lame debuggers like | remedybg | sneed_chucker wrote: | Impressive work. | | Be careful about leaning on your age/precociousness to get | approval. It's not a long term solution. | koolba wrote: | First glance through the project and it seem well organized. | Kudos! | | How long have you been programming and what languages did you | start off with? I know quite a few developers decades older than | you that still don't know how to write a Makefile [1]. | | What's the deal with the inline emojis in the source? Is that | what all the cool kids are doing these days or does it just force | you to be mindful of non-ASCII input? | | [1]: _And even more that cannot write or understand dynamically | generated targets..._ | D4ckard wrote: | I started off learning Python and C++. At some point I got fed | up with C++ and switched to C. | | Haha, the emoji thing was something I was doing for about a | week or so. You see emojis used a lot more around Rust I guess. | I never bothered to remove them. I think the bugs around the | PID are fun. The ones in the comments might go at some point, | though I didn't experience any problems with editors (Helix, | Emacs, and VSCode all work) so far. | | Should I maybe disabled printing emojis to standard output in | the REPL if terminal colors are disabled as well? | koolba wrote: | > I started off learning Python and C++. At some point I got | fed up with C++ and switched to C. | | How many years and hours per day? | | > Should I maybe disabled printing emojis to standard output | in the REPL if terminal colors are disabled as well? | | I generally avoid anything that's not ASCII if it's possible. | Tying it to terminal colors or terminal output (e.g. "if [ -t | 1 ] ...") is common too. Though I'm not a big fan of things | changing based on the runtime environment as it makes | debugging annoying. | trmpakufnfee wrote: | Awesome. I wish I had this level of dedication when I was young. | | I recommend you to participate in programs like Google Summer of | Code, KDE Season of Code, Linux Foundation LFX, and X.org EVoC. | There are some very interesting problems to solve. I wish I had | known about them when I was student. Now I am working in Full | time job, therefore have no time to contribute to open source. | | Keep up the good work. | D4ckard wrote: | Thanks for pointing me to those projects! I didn't know about | any of them. | xvilka wrote: | We (Rizin and Cutter) usually participate in GSoC, so if we | are accepted next year as an organization, you could apply. | See our previous programs[1][2][3]. | | [1] http://rizin.re/gsoc/2023/ | | [2] https://rizin.re/posts/gsoc-2023-announcement/ | | [3] https://rizin.re/posts/gsoc-2023-dwarf/ | D4ckard wrote: | Thanks the links : D | pjmlp wrote: | Congratulations, good luck with your projects. | | Compilers was one of the first rabbit holes that drove my | interest into computing. | | One of the books that I endless read multiple times, is nowadays | available for free, and eventually interesting for your reading | collection, even though it is about the compiler part not | debugging. | | "Compiler Design in C" | | https://holub.com/compiler/ | | It is a bit oldie, but maybe interesting. | D4ckard wrote: | Thank you for the link. I'm always looking for books on | compilers, but they can be hard to find. Many of them are every | _from the ivory tower_ -like unfortunately. | junior44660 wrote: | Try "crafting interpreters", it's very practical book. | bluetomcat wrote: | Looks especially clean, consistent and well-modularised, tackling | a problem that requires non-trivial knowledge about binary | formats and kernel APIs. Many "senior" programmers would struggle | to build something like this even at a conceptual level. The | antithesis of "kids these days" :-) | | Out of curiosity, how does a 17-year-old attain that level of | knowledge? Books, peers, programming clubs, parents who are | programmers probably? | D4ckard wrote: | It's mostly books and blogs: I like to read a lot. Also, your | guess is correct, my dad is a computer scientist. | manicennui wrote: | Reading books to increase your understanding puts you ahead | of 90% of people who graduated from a CS program in the last | 5-10 years from what I've seen. Several of my coworkers | admitted to having never read a book on anything related to | software engineering before and it shows. | flykespice wrote: | To be honest these days articles on the web seem to be more | efficient means to attain knowledge than a book, with less | condensed words | up2isomorphism wrote: | Because there is no software engineering manager who likely | does not write any useful code for a long time and is telling | engineers what to do. | ManuelKiessling wrote: | Tangential: my gut feeling is that this is a very good use case | for GPTs; I'm an experienced application developer and | sysadmin, but wouldn't even know where to start if I'd want to | tackle this sort of topic. I'm pretty sure ChatGPT would point | me in the right direction and allow me to tackle the first | important steps. | sdwr wrote: | Yeah this is the dream for ChatGPT. Someone with enthusiasm, | some knowledge, and tons of free time. | thibaut_barrere wrote: | I can reply because I was in the same situation at a younger | age, at a time with no internet then limited internet. | | Raw curiosity & having "just access to the required hardware" | (a huge "just") and a bit of books & magazines can take you a | long way. | | My parents were not programmers but my father bought computers | early on (1984), and later brought compilers at home (via his | work), e.g. TurboPascal, C++, and let me experiment. | | I learned mostly via magazines & books, and later a bit of | exchanges with peers (demomaking), and also via buying disks | (https://fr.wikipedia.org/wiki/DP_Tool_Club) that contained | documentation (such as | https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List) | and arrived via snail mail. | | I "just" gradually iterated and coded small stuff, then | gradually more complicated stuff (Windowing toolkit in CGA, a | Tetris clone, a Bomberman clone, FFT software, and ultimately | 3D realtime rendering without any FPU, only in software, with | Phong rendering and such | https://github.com/thbar/demomaking#obez-1995). | | I was not an isolated case in the sense I ended up stumbling on | other teenagers (via the demomaking world) who did exactly the | same thing. | | Today a curious kid can go probably much further, as long as | curiosity is encouraged :-) | flashgordon wrote: | Wow this is amazing. My question on top of yours is beyond just | knowledge (which yes yes I know I am underrating) how does a 17 | year old get this kind of passion. (Not to brag) I was very | fortunate to have this kind of passion in my early teens (also | I did not have many friends) but I am really struggling to get | my kids and their friends this kind of passion! | forgotpwd16 wrote: | >how does a 17-year-old attain that level of knowledge? | | There's an excellent blog series linked at repo that guides you | step-by-step. | spiralx wrote: | Nice one, I remember writing a 2D graphics library in Turbo | Pascal using embedded hand-optimised assembly for the actual | drawing code when I was your age, but that was back before I | discovered the internet so it ended up being something I'd | enjoyed writing but never did anything with, so well done on | taking the next step turning it from a personal project to one | that other people can see and maybe use themselves - it all looks | very tidy, well-commented and the README is clear. | | Putting things out there for the world to see can be a scary | thing, but remember that what people say is often as much about | them than it is about your work, especially so when what they say | is about you. | | PS I'm actually more interested in Motes than this myself, going | to experiment with it now :) | D4ckard wrote: | Oh, I just noticed some bugs in the code while using Motes the | other day. Expect some weirdness with the Emacs plugin. The | scripts have been working flawlessly for me the past few weeks | though. I hope you like them :D | bregma wrote: | So, only self-hosted debugging on x86_64 Linux. A good start. | | Now make it work for other common CPUs (aarch64, RISC-V). | | Make it work for other OSes (FreeBSD has ptrace, for example). | | Make sure it handles signal and thread trampolines, calls through | the VDSO, and handwritten assembler that does not have function | prologues. Handle C++ constructors and destructors of objects in | static storage running before/after main(). | | Have it intercept signals. Have it follow the child or the parent | after forking. Have it handle multiple threads. | | Make it work with coredumps. | | Make it work on core dumps from a foreign CPU architecture (big- | endian PowerPC, for example). | | Make it work with debug symbols in separate files from the | executable. | | Make it work with binaries compiled from languages other than C. | | You're going to be busy for the next 20 years or so. | brancz wrote: | I just spent ~1.5 years of my life on various aspects of | debuginfos and that even just for profiling where I only need | line/column information. So I feel this comment through and | through. | D4ckard wrote: | Yeah, I don't think so. It's x86_64 only, and C only too. Some | points from your list make sense now, but most of it is simply | not part of Spray's scope, and never has been ... | thibaut_barrere wrote: | Not commenting on the debugger specifically, but: keep being | curious & experimenting, it will go a long way :-) (I was in | your shoes) | lopkeny12ko wrote: | The point the parent commenter is trying to make is that | building a general purpose C debugger is not some kind of | trivial exercise that can be shipped in 6 months, and | claiming to have done so is disingenuous and pompous. | thibaut_barrere wrote: | > claiming to have done so is disingenuous and pompous. | | I don't read anything that might express that? | | Especially with: | | >> Its feature set is limited at this point, but it's | already enough to tackle some basic problems. | roadbuster wrote: | The parent commenter doesn't need to piss on a 17 year old | for sharing their work and progress. You could also take a | moment to step back and reflect on this. | dang wrote: | Please don't respond to a bad comment by breaking the | site guidelines yourself. That only makes things worse. | | https://news.ycombinator.com/newsguidelines.html | dang wrote: | Please don't cross into name-calling and certainly not | personal attack. | | https://news.ycombinator.com/newsguidelines.html | owenpalmer wrote: | > building a general purpose C debugger is not some kind of | trivial exercise | | Yes | | > claiming to have done so is disingenuous and pompous | | Nobody has claimed to do so in this situation. You are | inventing conflict. Also I don't think bregma intended to | be this targeting or accusatory, why are you speaking for | them? | lopkeny12ko wrote: | What others need to understand is that, unlike the older | generation, kids today have grown up in the era of easily | accessible computing. Someone who is 17 today was born in the | year the original iPhone was introduced. Computing literacy is | not only required, it is _expected_ from a very young age. What | might have been impressive to us 20-30 years ago is not really | the same as it is now. | | Cool project, but as other commenters have pointed out, the self- | promotion of off-putting. Don't hold on to using your age as a | qualifier to make you stand out in job applications or otherwise. | vimy wrote: | It's the opposite. Computer literacy has gone down for gen Z, | iOS and Android are too simple and locked down. | | So this is very impressive at that age. | marcus0x62 wrote: | Did you read the first paragraph after you wrote it? If you | did, and then posted it anyway, I don't really know what to | say. But, in any case, "Computing literacy" != "wrote a | debugger." | | Your post comes off more delusional (or just ignorant) than the | OP ever came off as self-promotional. | dang wrote: | Please don't cross into name-calling or personal attack, | regardless of how wrong another comment is or you feel it is. | | https://news.ycombinator.com/newsguidelines.html | zerr wrote: | Awesome! It might be boring for you, but accompanying that | project with a "Let's write a debugger" tutorial would be very | useful. | gdcbe wrote: | Seems 17 year old kids do still know what cd's are. The floppy | disk save icon might not be deprecated after all :P | MuffinFlavored wrote: | I always found this a bit weird. Why do you want everybody to | know how old you are? It's kind of like... hey, I did this | impressive thing, please give me credit, but also, just to give | it some flare and kick it up a notch, I'm also super young making | it that much more impressive! | | Why couldn't the title be | | > Show HN: I spent 6 months building a C debugger | | Why is your age relevant other than "wow factor"? | codetrotter wrote: | It's very common for teenagers to do so. I did the same when I | was their age. No reason to question why they do it, it's just | a thing teenagers do. | MuffinFlavored wrote: | > No reason to question why they do it, | | No, then they'll never learn that it is received by "adults" | as "unnecessarily extra-attention seeking". | | Most people who like to share stuff are seeking validation | one way or another (myself included). | | It might be worthwhile for OP to step back and ask "why am I | seeking validation from strangers online to find what I post | impressive"? | thibaut_barrere wrote: | Maybe he didn't come here to receive a therapy :-) | | Maybe it's just cool to connect with people similarly | minded and share what everyone is doing, not necessarily | for attention seeking, but because it improves everyone's | situation by sharing extra knowledge? | | Just sharing what I did at a younger age brought me | extraordinary connections at the time, some who still are | friends 30 years later. | skullone wrote: | Because this is a highly unusual and complex thing for someone | that young to accomplish? We should applaud them for their | dedication and results. There's soooop much that can distract | youth (or anyone of any age) from completing a pursuit like | this. To the point I find your comment to be pedantic and | ageist. | badrabbit wrote: | Your expectation that age should have prevented OP from doing | cool things is what is ageist and harmful to the success of | youth. A 17 year old can revolutionize the world if they | wanted to, lest you "adults" set such a low bar. | _Algernon_ wrote: | This is a highly unusual and complex thing for anyone to | accomplish. Why not let the achievement stand for itself? | | Mentioning one's age screams insecurity (though to be fair, | that is to be expected from teenagers). And as this comment | chain illustrates it also partially derails the conversation | to discussing his age, instead of his actual achievement. | badrabbit wrote: | I was about to make a similar comment. The project is | impressive but a bit annoyed because he attached his age to it. | | OP, you'll do cool stuff. Your age, location,sex, etc... has | nothing to do with it. A 60yr old hobo and a 17yr old kid who | know nothing about programming are at an equal footing, what | each accomplishes is the result of how much time and effort | they put into it (not neccesarily the same). | | If you were like a 5 year old that'd be noteworthy but reading, | writing, knowing how to use a computer and time is all that is | needed for coding, unless you are out there creating or | implementing sophisticated algorithms that require background | mathematical knowledge. | | I'd love to be corrected on this but there isn't anything you | learn in school beyond like the 6th grade that is needed to | succeed as a coder (not SWE, just programming and creating cool | stuff). | | I hope you let the coolness of your work speak for itself in | the future OP. | 2C64 wrote: | Different strokes, but the context in which something is built | can be just as interesting as what is built when it is unusual. | See also the post recently about the open source contributor | working from a prison in Maine - that's interesting for a ton | of reasons. | | In this case there are two interesting things: that they built | a debugger and that they are 17. The latter information might | also lead to more interesting helpful comments for the kid | versus a "okay, and?" series of responses. | | And at the end of the day, every Show HN has a bit of "hey, | notice me!" in it - whether or not age or other identifying | information is included. I don't think that's bad. | pvg wrote: | If you squint, 'no weird meta nitpickery' is not hard to derive | from most of https://news.ycombinator.com/showhn.html | forgotpwd16 wrote: | Cool job. Grats! | | >Parts of the Spray frontend are written in Scheme | | Why you decided it do it that way rather fully in C or fully in | Scheme? | cyberpunk wrote: | Why do you put spaces between your function names and their | arguments? | | I find it quite jarring, as someone who's spent a good 18 years | reading C code :} return lookup_breakpoint | (dbg->breakpoints, get_pc (dbg->pid)); | | vs return lookup_breakpoint(dbg->breakpoints, | get_pc(dbg->pid)); | | Edit: I tend to lean towards the 'bsd' style, if you have an open | or freebsd system, try 'man style' and try their rules on for | size. | valleyer wrote: | It's GNU style, which some people prefer. | | https://www.gnu.org/prep/standards/standards.html#Syntactic-... | cyberpunk wrote: | Damn, I really have been in my cave for too long! Forgot all | about their weird if {}. | | Thanks! | darkwater wrote: | Off-topic but I can not avoid a tear of joy reading this: | | > In the Unix world, "portability" refers to porting to | different Unix versions. For a GNU program, this kind of | portability is desirable, but not paramount. | | The primary purpose of GNU software is to run on top of the | GNU kernel, compiled with the GNU C compiler, on various | types of CPU. So the kinds of portability that are absolutely | necessary are quite limited. But it is important to support | Linux-based GNU systems, since they are the form of GNU that | is popular. | eliben wrote: | Really nice work! | | I'm happy you found my articles useful :) | SillyUsername wrote: | Well done. | | Achieving this at 17 is a rare feat even most supposed senior | developers don't achieve and it ranks up there with writing an | emulator. | | It was only in my late 20s I understood low level architecture | enough to be able to do similar work, like you through passion, | which I never had in my teens (I did start programming Pong like | games at 8 years old and Tetris clones around 12/13 but that's | hardly the same ;) ). | | Keep up the great work, it restores my faith that their are less | code monkeys out their like me! | silentsea90 wrote: | I feel like a code sloth/donkey if you with your achievements | are a code monkey. I think we need a hierarchy of animals here. | I'll fit right at the bottom thank you. ___________________________________________________________________ (page generated 2023-11-11 23:00 UTC)