I feel like it's good to note since I missed it. This post is from Feb 13, 2023. He has up to 8 posts on this at this point which don't appear to be linked to from this post. I think linking to all of them would be a bit much, but they're all currently listed on his main page [1].
For linux, there's this excellent series of articles by Eli Bendersky:
https://eli.thegreenplace.net/2011/01/23/how-debuggers-work-...
https://eli.thegreenplace.net/2011/01/27/how-debuggers-work-...
https://eli.thegreenplace.net/2011/02/07/how-debuggers-work-...
(Unfortunately, the articles don't include links to their respective follow-ups, but I'm pretty sure it ends after part 3...)
I feel like it's good to note since I missed it. This post is from Feb 13, 2023. He has up to 8 posts on this at this point which don't appear to be linked to from this post. I think linking to all of them would be a bit much, but they're all currently listed on his main page [1].
[1] https://www.timdbg.com/
A favorite developing a debugger story was from a friend of mine.
They were working on a debugger for OS/2, which was quite notable at the time for being multitasking.
And at one point they got to enough of a base feature set that they could use the debugger on itself. Debugging the debugger.
While debugging the debugger, they would inevitably encounter other bugs in the debugging debugger.
So, with OS/2, they had a bit of an epiphany when they were able to debug the debugger debugging the debugger.
It took us a bit of work back in the day to use Firebug to debug Firebug. But pretty easy these days to have Chrome dev tools to debug itself.
There’s a relevant book from No Starch, highly recommend. The author also has a series of blog posts on the topic.
https://nostarch.com/building-a-debugger