Well, debugging takes (generally speaking) knowledge of the product being debugged, the ability to read and understand native code in C or C++ (and also managed code, if debugging a .net application), and then, practice and research. There are books that are available that can help you along the way - books like Advanced Windows Debugging
, Advanced .NET Debugging
, and Windows Debugging:Practical Foundations
, Windows Internals 4th
editions (soon to be a 6th
), and books like Programming Windows
and Programming .NET
. Also, being a regular visitor of sites like Dmitry Vostokov's Crash Dump Analysis
, Alex Ionescu's Blog
, Scott Noone's Analyze-V blog
, the ASKPERF site
, Mark Russinovich's blog
, and Raymond Chen's Old New Thing
are also good once you start down this road.
However, without prior knowledge of the subject matter, development, and practice, it is indeed like doing it "the hard way". It's not so much a science as an art that has defined structure that you can practice and get better at, really.