All the power and flexibility of the Microsoft Debugging Tools package can be diminished by its complexity and learning curve. After all, it is very easy and comfortable to work with the Visual Studio debugger 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. However, when the competitive advantage of one tool over another is obvious, there is nothing worse than getting stuck in a situation which is suboptimal 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 such as setting up symbols and the theory of command types in WinDbg, to the advanced topics such as remote debugging.

The subject covers 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 I found a list of important topics that you should try to keep in mind:

The libraries of WinDbg's debug engine (slides 6 and 9)

The debug symbols and how they are found by WinDbg (11, 12, 14)

Exception handling by the OS and 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)

In the end there are two important tips for those who wish to explore the debugging world in more detail: read WinDbg's documentation (which is also great, although much more extensive) and learn assembly (simply essential if you want to solve a variety of 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 debug situations.

Just thought I'd tell you how much I love that article. I'm still reading it, but even from the first few dozen pages I've learned so much that I missed when reading over the dry official reference manual.