This document provides advice and techniques for debugging software. It discusses:
- The relationship between testing and debugging and the testing/debugging cycle.
- Why debugging is difficult due to factors like non-obvious relationships between errors and causes.
- Types of bugs like logic errors, memory issues, interface errors, and off-nominal conditions.
- The ideal debugging process of identifying reproducible test cases, isolating problems, and fixing while regression testing.
- General debugging techniques like tracing execution, adding assertions, and interface checking.
- The role and functions of debuggers in tasks like disassembly, execution tracing, and viewing symbol information.