In my experience one of the most useful skills a developer/programmer/software engineer needs to have is an ability to answer the following two questions:

  1. How does something work?
  2. Why doesn't something work?
Applications range from the obvious (debugging some sort of a problem) to profiling or reverse engineering or quickly understanding how the code you have never seen before is implemented.

Below is the list of books I have found useful to improve the debugging skills for Windows. The list is sorted in the order of my own perceived importance:

  1. "Inside Windows Debugging: A Practical Guide to Debugging and Tracing Strategies in Windows®" by Tarik Soulami. Covers both user-mode and kernel-mode debugging. If you can purchase only one book then acquire this one.
  2. "Advanced Windows Debugging" by Mario Hewardt and Daniel Pravat. Very solid technical reference which covers all the core concepts extremely well.
  3. "Advanced .NET Debugging" by Mario Hewardt. If you are debugging complicated issues in managed code then this is the best reference available.
  4. "Debugging Applications for Microsoft® .NET and Microsoft Windows®" by John Robbins. Absolute classic :-) Check out the updated version "Debugging Microsoft .NET 2.0 Applications" as well.
  5. "Memory Dump Analysis Anthology, Volumes 1-6" by Dmitry Vostokov. If looking at debugging logs and pages and pages of stack traces is something you do on Saturday evenings then this is a good reading material.

Please keep in mind though that reading will just give you a necessary theoretical background. To understand how to use this knowledge properly and when to apply the specific techniques you will still need to put in the hours/days/weeks/months/years required to master the practical aspects of the debugging process. All of this also assumes that you are very well aware of how operating system(s) works. If not then you will need to invest some time and familiarize yourself with the following books as well:

  1. "Windows via C/C++" by Jeffrey M. Richter and Christophe Nasarre. Covers Windows from user-mode point of view.
  2. "Windows Internals, Part 1: Covering Windows Server® 2008 R2 and Windows 7" by Mark E. Russinovich, David A. Solomon , and Alex Ionescu. Make sure you get the second part as well.
If this sounds like a lots of reading then it definitely is. However, if you aspire to work on a really complicated issues and use Windows as an operating system then you need to know how the machinery under the hood operates .