Rough Cuts are manuscripts that are developed but not yet published, available through Safari. Rough Cuts provide you access to the very latest information on a given topic and offer you the opportunity to interact with the author to influence the final publication.
This is a working draft of a pre-release book. It is available before the published date as part of the Rough Cuts service.
“Mario Hewardt’s Advanced .NET Debugging is an excellent resource for both beginner and experienced developers working with .NET. The book is also packed with many debugging tips and discussions of CLR internals, which will benefit developers architecting software.”
–Jeffrey Richter, consultant, trainer, and author at Wintellect
“Mario has done it again. His Advanced Windows Debugging (coauthored with Daniel Pravat) is an invaluable resource for native code debugging, and Advanced .NET Debugging achieves the same quality, clarity, and breadth to make it just as invaluable for .NET debugging.”
–Mark Russinovich, Technical Fellow, Microsoft Corporation
The Only Complete, Practical Guide to Fixing the Toughest .NET Bugs
Advanced .NET Debugging is the first focused, pragmatic guide to tracking down today’s most complex and challenging .NET application bugs. It is the only book to focus entirely on using powerful native debugging tools, including WinDBG, NTSD, and CDB, to debug .NET applications. Using these tools, author Mario Hewardt explains how to identify the real root causes of problems—far more quickly than you ever could with other debuggers.
Hewardt first introduces the key concepts needed to successfully use .NET’s native debuggers. Next, he turns to sophisticated debugging techniques, using real-world examples that demonstrate many common C# programming errors.
This book enables you to
A companion web site (advanceddotnetdebugging.com) contains all sample code, examples, and bonus content.
Foreword xix
Preface xxi
Acknowledgments xxxi
About the Author xxxiii
Part I: Overview 1
Chapter 1: Introduction to the Tools 3
Debugging Tools for Windows 3
.NET 2.0–Redistributable 4
.NET 2.0–SDK 5
SOS 8
SOSEX 10
CLR Profiler 11
Performance Counters 14
Reflector for .NET 15
PowerDbg 16
Managed Debugging Assistants 18
Summary 21
Chapter 2: CLR Fundamentals 23
High-Level Overview 23
CLR and the Windows Loader 26
Application Domains 33
Assembly Overview 38
Assembly Manifest 39
Type Metadata 42
Summary 68
Chapter 3: Basic Debugging Tasks 69
The Debugger and the Debugger Target 69
Symbols 74
Controlling Execution 77
Loading Managed Code Extensions 85
Controlling CLR Debugging 90
Setting Breakpoints 90
Object Inspection 103
Thread Operations 131
Code Inspection 143
CLR Internals Commands 146
Diagnostics Commands 149
SOSEX Extension Commands 151
Crash Dump Files 163
Summary 165
Part II: Applied Debugging 167
Chapter 4: Assembly Loader 169
CLR Loader Overview 169
Simple Assembly Load Failure 179
Load Context Failure 185
Interoperability and DllNotFoundException 195
Debugging Light Weight Code Generation 197
Summary 202
Chapter 5: Managed Heap and Garbage Collection 203
Windows Memory Architecture Overview 204
Garbage Collector Internals 213
Debugging Managed Heap Corruptions 254
Debugging Managed Heap Fragmentation 262
Debugging Out of Memory Exceptions 272
Summary 291
Chapter 6: Synchronization 293
Synchronization Basics 293
Thread Synchronization Primitives 294
Synchronization Internals 306
Synchronization Scenarios 316
Summary 344
Chapter 7: Interoperability 345
Platform Invocation 345
COM Interoperability 352
Debugging P/Invoke Calls 358
Debugging Interop Leaks 373
Debugging COM Interop Finalization 378