All power and flexibility of the Microsoft Debugging Tools package can be diminished by its complexity and learning curve. After all, using the Visual Studio debugger is very easy and comfortable once you begin to use it. Those who advocate the use of a unified tool that does everything, like a cell phone, make the case even worse. But when the competitive advantage of one tool over another is remarkable, there is nothing worse than getting stuck in a situation which is the minimum for you. As I was thinking about this difficulty I found a presentation written by Robert Kuster that explains all the important details of debugging with WinDbg for novice and experienced programmers. The presentation "WinDbg. From A to Z!" turns out to be just as useful as WinDbg itself, because it explains everything from simple things that you should know right away (setting up symbols for example), to the advanced topics such as remote debugging. Additionally to substantial amount of other information the author also explains the theory of command types in WinDbg.
Although trying to be brief the subject occupies a set of 111 slides that take one or two hours of careful reading, if you do not make tests during the trip. Among the things I have read and reread, here is a list of important topics never to be forgotten:
What are the libraries of WinDbg's debug engine (slides 6 and 9)
What are debug symbols, how they are found by WinDbg (11, 12, 14)
How does exception handling work, how to debug exceptions (18, 19, 85)
How to configure your debugger to operate system-wide (20)
Types of commands in WinDbg (22)
Configuring symbols and sources in WinDbg (24, 25)
WinDbg window options (33)
DML: Debugger Markup Language (35)
Processes and threads on Windows (26, 27, 29)
Commands on threads and locks (31, 55)
Memory: Stack details (37, 39, 41)
Memory: General commands (43)
Memory: Heap commands and examples (45, 49, 51, 53)
Useful commands for strings and memory manipulation (66)
Evaluating expressions in WinDbg: MASM and C ++ (70, 71)
Breakpoints in WinDbg (basic) (81)
Breakpoints in WinDbg (advanced) (83, 84)
Remote Debugging (very useful!) (87)
Choosing the best tool for the problem (great!) (108)
At the end there are two important tips for those who wish to explore deeper into the debugging world: read WinDbg's documentation (which is also great, although much more extensive) and learn assembly (simply essential to solve many problems). If you never took the time for advanced debugging on Windows think about it again. It could take you 2 hours (divide this into 15 minute periods per day!) to read this great tutorial. As a result you might surprisingly end up with an exponentially reduced troubleshooting time for your problems.