Now is a good time to evaluate whether you have learned anything from reading this book and what you want to put into practice. The tables in this section list all the techniques described in this book. If you don’t know how to use a technique, go back and reread the corresponding section.
The columns give you space to decide how to apply the technique. If you’re already using the technique, check the first column. If you would like to use the technique at the next opportunity, check the second column. If you would like to use the technique at some future time, check the third column. Put more checks in the third column than the second one. You can’t use everything first. If you don’t think the technique is applicable to your work, check the last column.
Technique | Already Using | Use Soon | Use Later | No Plans |
---|---|---|---|---|
Use cross-disciplinary knowledge | ||||
Focus on facts | ||||
Pay attention to unusual details | ||||
Gather facts before hypothesizing | ||||
State the facts to someone else | ||||
Start by observing | ||||
Don’t guess | ||||
Exclude alternative explanations | ||||
Reason in both directions | ||||
Watch for red herrings | ||||
Use alibis as clues | ||||
Eliminate impossible causes | ||||
Exercise curiosity | ||||
Reason based on facts | ||||
Enumerate possibilities | ||||
Use the power of logic | ||||
Use a system for organizing facts | ||||
Exercise caution when searching | ||||
Use gestalt understanding | ||||
Show how something could be done | ||||
Don’t look for it | ||||
It isn’t lost—you are |
Technique | Already Using | Use Soon | Use Later | No Plans |
---|---|---|---|---|
Remember the three c’s | ||||
It’s where it’s supposed to be | ||||
Look for domestic drift | ||||
You’re looking right at it | ||||
The camouflage effect | ||||
Think back | ||||
Look once, look well | ||||
The eureka zone | ||||
Tail thyself | ||||
It wasn’t you | ||||
Use a binary search strategy | ||||
Use a greedy search strategy | ||||
Use a breadth-first search strategy | ||||
Use a depth-first search strategy | ||||
Use a program slice strategy | ||||
Use a deductive-analysis strategy | ||||
Use a inductive-analysis strategy | ||||
Stabilize the program | ||||
Create a test case | ||||
Reduce the required input | ||||
Categorize the problem | ||||
Describe the problem | ||||
Explain the problem to someone else |
Technique | Already Using | Use Soon | Use Later | No Plans |
---|---|---|---|---|
Recall a similar problem | ||||
Draw a diagram | ||||
Choose a hypothesis from historical data | ||||
Read the code | ||||
Write unit tests | ||||
Display variable values | ||||
Display execution messages | ||||
Display procedure arguments | ||||
Generate a flow trace | ||||
Generate a variable snapshot | ||||
Generate a memory dump | ||||
Force a variable value | ||||
Assert assumptions | ||||
Check data structures | ||||
Display data structures | ||||
Use runtime subscript checking | ||||
Use runtime stack checking | ||||
Use runtime heap checking | ||||
Initialize global variables | ||||
Initialize local variables | ||||
Change storage class | ||||
Use a different compiler | ||||
Compile to an intermediate level | ||||
Execute on a different platform |
Keep the list near you when you’re doing debugging work. When you’re working on a difficult bug, look over the list and see if any of the techniques might help you. If you use one of the techniques for the first time, write the date in the table.