Data-flow graphs, 215–16
Data processing (DP), 20
Data-structure books, 63–64
Data structure checking, 239–40
correct creation of, 321
defined, 239
language specifics, 240
potential problems, 239
purpose, 239
questions answered, 239
refined tactics, 239–40
related tactics, 240
tactics selection, 240
See also Debugging tactics
Data structure display, 240–42
defined, 240–41
potential problems, 241
purpose, 241
questions answered, 241
refined tactics, 241
related tactics, 241–42
tactics selection, 24
See also Debugging tactics
Data structure(s)
augmented, 466–67
defective, at end of moveup function, 92
defective, before moveup function, 98
design defects, 367–68
display, 126
dumping, 92, 312
dynamic, 374
nodes removed from, 113
printing, turning off, 138
programming language, 214
static, 373–74
tree, 122
Debugging
alternative explanation exclusion, 28–29
applying Lord Peter Wimsey to, 36
applying Professor Solomon to, 50
applying Schoenfeld to, 185
applying Sherlock Holmes to, 19
camouflage effect, 55–56
cause elimination, 28, 38
cross-disciplinary knowledge, 19–20
curiosity, 39
defined, 9
detecting vs., 26
development methodologies and, 8–12
domestic drift, 53–54
by editing, 10
eureka zone, 58
fact focus, 20–21
fact gathering, 23–25
fact organization, 42–43
gestalt understanding, 45–46
by interacting, 11
logic, 40–41
observations, 25–27
output, turning off, 307
possibilities, enumerating, 41–42
reasoning based on facts, 40
reasoning in both directions, 29–30
red herrings and, 30–31
by repeating, 11
search caution, 44
search record, 57
side effects as clues, 36–38
techniques, 510–12
testing vs., 8–9
by thinking, 10–12
unusual details, attention to, 21–23
Debugging heuristics, 201–19
categorize the problem, 208–12
choose a hypothesis (from historical data), 216–17
create a test case, 203–7
defined, 185
describing the problem, 212–13
draw a diagram, 215
explain the problem (to someone else), 213
list of, 201
recall a similar problem, 214–15
reduce required input, 207–8
review, 217–19
stabilize the problem, 202–3
Debugging infrastructure, 466–69
assertions, 469
augmented data structures, 466–67
augmented procedures, 467–68
specialized interactive debuggers, 468–69
Debugging strategies, 189–99
binary search, 190–91
breadth-first search, 192–93
choosing, 197–99
deductive-analysis, 196
defined, 185
depth-first search, 193–94
evaluation mechanisms, 189–90
greedy search, 191–92
inductive-analysis, 196–97
program slice, 195
review, 199
Debugging tactics, 185, 221–56
assert assumptions, 237–39
change storage class, 249–51
check data structures, 239–40
compile to assembly code, 252–54
defined, 185
different compiler, 251–52
different platform, 255–56
display data structures, 240–42
display execution messages, 227–30
display procedure arguments, 230–32
display variable values, 225–27
force variable value, 236–37
generate a flow trace, 232–33
generate a memory dump, 234–36
generate a variable snapshot, 233–34
initialize global variables, 247–48
initialize local variables, 248–49
list of, 221–22
military analogy, 186
read source code, 222–24
review, 25
runtime heap checking, 245–46
runtime stack checking, 243–45
runtime subscript checking, 242–43
usefulness, 187
write unit test, 224–25
Deductive-analysis strategy, 196
assumptions, 196
choosing, 198–99
control structure, 196
See also Debugging strategies
Defects
algorithm, 368–69
binding, 372–73
coding, 371–80
control-flow, 377
design, 367–71
dynamic data-structure, 374
external software, 379–80
extra operation, 376–78
finalization, 372
hardware-interface specification, 371
initialization, 371–72
invalid expression, 378–79
location, 53
memory, 375–76
missing operations, 376
object-oriented, 375
occurrence of, 46
reference, 373
similar, 151
software-interface specification, 370–71
static data-structure, 373–74
typographical, 379
user-interface specification, 369–70
value-corruption, 377–78
See also specific bugs
Depth-first search strategy, 193–94
assumptions, 193–94
choosing, 198
control structure, 194
defined, 193
using, 194
See also Debugging strategies
Describing problems, 212–13
Design errors, 367–71
algorithms, 368–69
data structures, 367–68
hardware-interface specification, 371
software-interface specification, 370–71
user-interface specification, 369–70
See also Software-defect root causes
Detail design (engineering), 435
Details, attention to, 21–23
Detective(s), 15–32
fiction, 16
Lord Peter Wimsey, 133–47
methods, 18–31
Professor Solomon, 49–61
Sherlock Holmes, 17–31
way of, 3
worldview of, 15–16
Development
engineering, 435
environment, 215
stage, 537–50
Diachronic approach, 27
Diagrams
application-specific, 216
control-flow, 215
data-flow, 215–16
drawing, 215–16
hypotheses, 216
of static relationships, 216
Different compiler, 251–52
defined, 251
language specifics, 252
potential problems, 251
purpose, 251
questions answered, 251
refined tactics, 251
related tactics, 251
tactics selection, 251–52
See also Debugging tactics
Different platform, 255–56
defined, 255
potential problems, 255
purpose, 255
questions answered, 255
refined tactics, 255
related tactics, 255
tactics selection, 255–56
See also Debugging tactics
Diff program, 125
Disjunction effect, 413
Domestic drift, 53–54
Drawing diagrams, 215–16
application-specific, 216
control-flow, 215
data-flow, 215–16
See also Debugging heuristics
Dynamic analysis, 488
Dynamic-analysis tools, 488–503
analysis comparison, 504–5
BoundsChecker, 493–95
Insure++, 489–93
mpatrol, 497–503
Purify, 495–97
Dynamic data-structure problems, 374