I highly recommend the book: Debugging Rules
Notes from the book:
- Understand the system
- Read the manual
- Read everything in depth
- Know the fundamentals
- Know the road map
- Understand your tools
- Look up the details
- Make it fail
- Do it again
- Start at the beginning
- Stimulate the failure
- But don’t simulate the failure
- Find the uncontrolled condition that makes it intermittent
- Record everything and find the signature of intermittent bugs
- Don’t trust statistics too much
- Know that “that” can happen
- Never throw away a debugging tool
- Quit thinking and look
- See the failure
- See the details
- Build instrumentation in
- Add instrumentation on
- Don’t be afraid to dive in
- Watch out for Heisenberg (don’t let instruments overwhelm your system).
- Guess only to focus the search
- Divide and conquer
- Narrow the range with successive approximation
- Get the range
- Determine which side of the bug you are on
- Use easy-to-spot test patterns
- Start with the bad
- Fix the bugs you know about
- Fix the noise first
- Change one thing at a time
- Isolate the key factor
- Grab the brass bar with both hands
- Change one test at a time
- Compare it with a good one
- Determine what you changed since the last time it worked
- Keep an audit trail
- Write down what you did, in what order, and what happened as a result
- Understand that any detail could be the important one
- Correlate events
- Understand that audit trails for design are also good for testing
- Write it down!
- Check the plug
- Question your assumptions
- Start at the beginning
- Test the tool
- Get a fresh view
- Ask for fresh insights
- Tap expertise
- Listen to the voice of experience
- Know that help is all around you
- Report symptoms, not theories
- Realize that you don’t have to be sure
- If you didn’t fix it, it ain’t fixed
- Check that it’s really fixed
- Check that it’s really your fix that fixed it
- Know that if never just goes away by itself
- Fix the cause
- Fix the process

