I just got this new book on advanced debugging in Windows by Mario Hewardt and Daniel Pravat.  This book is right up my alley and gives an advanced tutorial on debugging in Windows using the Windows debugger (windbg, ntsd, and cdb).  I covered similar topics a while back in this managed code debugging tutorial.

I highly recommend this book for anyone doing any advanced systems code kind of debugging.  In particular Chapters 5 and 6 are great for understanding how to debug heap corruptions.  In these chapters the authors go through the layout of a stack (with all calling conventions explained), as well as walking through the heap and diagnosing bad pointers. 

If you are just writing managed code you should always be great using the Visual Studio debugger.  But if you ever have to do any advanced work, this book is definitely for you.