• Table of Contents
  • BackCover
  • Debugging Strategies for .NET Developers
  • Chapter 1: Debugging Introduction
    • Identifying the Problem
    • What .NET Adds to Debugging
    • Still More to Come
  • Chapter 2: Quickies - Six Pieces of Debugging Advice
    • 1) Never Ignore a Bug That Occurs Early in a Test to Investigate a Bug That Occurs Later
    • 2) Never Forget the Goal Is to Make the Program Work - Fixing the Bug Is the Means, Not the End
    • 3) When Something Works One Way but Fails in a Different Way, Focus on the Differences
    • 4) Never Assume the Problem Is a Bug in the Hardware, API, or OS Without Reasonable Proof
    • 5) Keep a Few Test Computers on Which Debugging Tools Are NEVER Installed - No Exceptions. Period.
    • 6) Step Over All New Code in the Debugger As Soon As You Finish Writing It
    • Highlights
  • Chapter 3: Always Have a Plan
    • Brute-Force Debugging
    • Three Guesses
    • The Cell Phone Problem
    • Highlights
  • Chapter 4: Assertion Debugging
    • What Are Asserts?
    • " But I Always Test My Code, So Why Do I Need Asserts? "
    • .NET's Debug and Trace Classes
    • Using Asserts Aggressively
    • Asserting Performance Bottlenecks
    • Don't Assert Legal Cases
    • When Asserts Can't Be Easily Used
    • Asserts with Remote Objects
    • Customizing Asserts with a TraceListener
    • Highlights
  • Chapter 5: Debugging with Logs
    • Printf Debugging
    • Program Logs
    • .NET's Support for Logging
    • Windows Event Logs
    • Highlights
  • Chapter 6: ASP.NET and SQL Debugging
    • ASP.NET and the Debugger
    • Logging with ASP.NET
    • Debugging SQL Stored Procedures
    • Highlights
  • Chapter 7: Debugging Remote Customer Sites
    • Why Is It So Hard to Debug a Remote Customer Issue?
    • The Server Is Unwilling to Process the Request
    • " Why Are You Asking Me All These Questions? Why Can't You Just Fix It?!? "
    • Automated Diagnostic Utilities
    • Changing the Log Level
    • Third-Party Tools Let You Watch the Customer Reproduce the Bug
    • For Very Hard Bugs, Let Developers Participate in the Tech Support Phone Calls
    • Make a New Build with More Logging - and a Way to Verify Whether It Gets Installed
    • Make Sure You Can Tell If the New Version Was Actually Installed
    • .NET Security
    • Highlights
  • Chapter 8: Multithreaded Debugging
    • What Is Multithreading?
    • Viewing Threads in the Debugger
    • Causes of Common Threading Problems
    • Debugging Threading Problems
    • Final Thoughts About Threading
    • Highlights
  • Chapter 9: Defect Tracking Programs
    • Why Do You Need Defect Tracking Software?
    • No Required Fields Except the Repro Steps
    • Development Workflows
    • Make Sure Your Workflow Has an Escape Hatch
    • Searching and Reporting
    • Learning from Past Mistakes
    • Priorities
    • Communicating with Teammates
    • What to Say on a Bounce-Back PR
    • Know Your Tools
    • Highlights
  • Chapter 10: Source Control Debugging
    • Introduction to Source Control
    • Debugging with SourceSafe
    • Highlights
  • Epilogue
  • Index
    • Index_B
    • Index_C
    • Index_D
    • Index_E
    • Index_F-G
    • Index_H
    • Index_I
    • Index_J
    • Index_K
    • Index_L
    • Index_M
    • Index_N
    • Index_O
    • Index_P
    • Index_Q
    • Index_R
    • Index_S
    • Index_T
    • Index_U
    • Index_V
    • Index_W
    • Index_X-Z
  • List of Figures
  • List of Tables