Developer Advanced Debugging Course Synopsis


  • Introduction
  • Prerequisites to debugging
  • Avoiding the debugger
    • ASSERT() and VERIFY()
    • Use the compiler
      • Compiler flags
      • Debug builds
    • Use analysis tools
    • Use free tools
  • The Debugging Process
    • Duplicate the bug
    • Describe the bug
    • Always assume that the bug is yours
    • Divide and conquer
    • Think creatively
    • Leverage tools
    • Start heavy debugging
    • Verify that the bug is fixed
    • Learn and share
  • Symbols
    • Why symbols are important
    • How to install symbols
    • Symbol paths
    • Symbol server and beyond
  • Autoexp.dat
    • Custom display of structures/classes
    • Don’t step into
  • The Watch Window
    • Pseudo variables
    • Registers
    • Formatting for expressions
    • Formatting for memory dumps
    • Displaying arrays
    • Function evaluation
      • Limitations
    • Calculator
    • Assembly operators
    • Timing code
  • The Disassembly Window
    • Decode a "random" address
  • Breakpoints
    • Simple breakpoints
    • Counted breakpoints
    • Conditional breakpoints
    • Memory breakpoints
    • Breakpoints on system/exported functions
    • Breakpoint a specific thread
    • Advanced breakpoint syntax
    • Breakpoint implementation
  • Memory
    • Categories of allocated memory
    • Memory allocators
    • CRT debug heap
    • Debugging memory leaks
    • Debugging memory corruption
  • Multiple Threads
    • Advice
    • Race conditions & deadlocks
    • Thread id
    • Per thread breakpoints
    • Things affecting multi-threaded debugging
    • Thread creation routines
    • Thread names
  • Exceptions
    • WIN32 exceptions (SEH)
    • Decoding C++ exceptions
    • Mixing C++ and SEH
  • Remote Debugging
    • When to use remote debugging
    • Remote debugging made easy
    • Manual setup
      • VS 6
      • VS 7 & 7.1
    • Remote debugging with DCOM and the MDM
    • Remote Just-In-Time debugging
    • Restrictions
  • Debugging Services
    • How to debug services
    • Problems
  • Debugging Problems
    • Debugging DLLs
    • Debug works - release Fails
    • Release works - debug Fails
    • Works in debugger - Not outside & vice versa
    • Unicode tricks
  • Assembler
    • How much Assembler do you need to know?
    • Calling conventions
    • Reading the stack
    • What is FPO and why does it matter
    • Why a map is important
    • How to recover a corrupt stack
  • WinDbg
    • What is WinDbg
    • Minimal command reference
    • Why WinDbg is important
  • Tools
  • Resources
    • MSDN
    • Tools
    • Books
    • Web
  • Conclusion