This article is my answer for this comment.
First of all, this is just my opinion, not Microsoft's opinion.
Before talking about books, let me explain something that I see over and over again.
Sometimes I've run across people who think they just need to know the debugger commands to become a good debugger.
This is a misconception. It's like chess: just because you know the game rules and how to move the pieces doesn't mean you are a good player. Actually to become good in chess you need to learn a lot more than the basics! To become great in chess you need to learn much more!
Debugging is the same. Debugging, testing and developing code are related topics. If you are a good programmer, you are a good tester and a good debugger. Of course, people that spend most of their time working with testing and creating test tools, have greater software testing skills. People that spend most of their time debugging have greater software debugging skills.
Anyway, the three activities are totally related, so if you want to be a good debugger the first thing you should know is how to program.
For several reasons I recommend C++ then C# if you want to learn more about managed debugging.
- A programming language. C++ is recommended. Learning C++ you'll learn C, too. Be sure to learn how to program in C++ using Object Oriented Programming. I actually learned C then C++.
- Knowledge about Windows internals, like APIs, message flow, etc. . .
- Ability to read disassembled code.
- How (and when) to use a debugger.
- How to isolate a problem, following a scientific approach based on hypothesis.
That said, below I present a list of books that I really like the most among all the books I've read. They are my favorites!
It will be great to receive feedback from readers about other interesting books, so feel free to share your favorite book titles.
Although these are my favorites you may want to check out for yourself.
I love books related to security! I'm not a security engineer, but I'm interested in knowing more about bugs and what they look like in low level terms. Moreover, these books talk about reverse engineering at some level.
It's always important for those that want to excel at debugging to know more about bugs. It helps you to get this "sixth sense" when analyzing a source code.
If you need to choose just one, pick up Code Complete 2nd edition.
Specifically for .NET the "Practical Guidelines…" it's awesome.
It's very helpful to know the low level details of COM and ATL as several applications use COM at some level.
Some of the books above talk only about the mindset you need to be a good debugger, others are more focused on code and others talk about both.
I love this topic! If you want to be a good debugger you need to know this stuff.
CrackProof your Software (Cerven) – old book, but still interesting.
In my opinion Kris Kaspersky has the best disassembly books! He really knows the stuff.
If you need to choose only one book, pick up Hacker Disassembling Uncovered 2nd edition, which comes with a CD of the first book. However if you don't want to print the content of the 1st edition from the CD, I recommend you get both books.
The McKinsey Way is a book that had early influence on my approach to isolating problems.
We used to debug codes together, old times, I can see you continue sharper than ever; Hey I don't know some of these books listed here, I will run to check out right now!
You can get a downloadable, fun poster of my nine rules at http://www.debuggingrules.com. It'll give you a useful, constant reminder of essential techniques, and look cool on your office wall. It's from the book Debugging – The 9 indispensable rules, referenced in the article.
I actually have the poster in my computer since I bought the first edition of your book!
Roberto, thanks a lot for the list. I'll now rush to the nearest book store.
Almost all of the good books I know are already listed by you.
One excellent C++ book not mentioned in your list is "Inside C++ Object Model" by Stan Lippman. Maybe you already know it. Reading this book was enlightening experience for me.
Please suggest where to start? I mean which book I should read first?
Thanks Roberto for the excellent book list! John Robbins recommended checking this page out in a training last week.
Two of the best C++ books out there that I liked so much are "C++ Primer" and "Inside C++ Object Model" by Stanley B. Lippman.