Learning about debuggers

Today’s article is a collection of materials to learn more about debuggers: how they work, which technologies are under the hood, what kind of problems exist in this area. There is of course a big overlap with related components like compilers and linkers, so get ready to learn lots of new things ๐Ÿ˜ƒ.

Of course, the list is not exhaustive by any means. These are just the links I’ve accumulated over the years and found useful for myself. If you’d like to add anything to the list, let me know!

Note: many of the links here are blog posts – be sure to check out other articles in those blogs! They’re often worth reading even if not directly related to the topic.

How debuggers work

All debuggers share the same basic principles: they need to attach to a process, parse the binary and debug information, handle breakpoints, etc. The implementations may vary significantly between the operating systems, but after you understand one of them, others will look very familiar.

Stack unwinding

Producing a call stack is one of the most basic debugger features, yet it’s far from trivial. In order to understand how it works, you’ll need to learn about frame pointers, call frame information (CFI), DWARF expressions and many other things. Here are some article that explore this topic in great detail.

Random debugger trivia

I already gave up with the categorization, so dumping the rest under “random trivia”.

General useful knowledge

Discuss this article: