Home

Learn more

Buy the book

For readers

Publishers' sites

Paperback · 423 pages
ISBN 978-0-12-374515-6 [US]
ISBN 978-3-89864-620-8 [DE]
      The book contains a number of "How to" tips, marked with a "HOW TO" in the margin. Unfortunately, during production, the table listing these tips accidentally got omitted. For your convenience, here's the complete list.

How to...

  • debug a program — 22
  • obtain the relevant problem information — 47
  • write an effective problem report — 47
  • organize the debugging process — 47
  • track requirements — 47
  • restore released versions — 48
  • separate fixes and features — 48
  • relate problems and fixes — 48
  • relate problems and tests — 48
  • test for debugging — 79
  • automate program execution — 79
  • test at the presentation layer — 80
  • test at the functionality layer — 80
  • test at the unit layer — 80
  • isolate a unit — 80
  • design for debugging — 80
  • prevent unknown problems — 80
  • reproduce a problem — 112
  • reproduce the problem environment — 113
  • reproduce the problem execution — 113
  • reproduce unit behavior — 113
  • simplify a test case — 138
  • automate simplification — 138
  • speed up automatic simplification — 139
  • isolate a failure cause — 163
  • understand the problem at hand — 163
  • avoid endless debugging sessions — 163
  • locate an error in a functional or logical program — 163
  • debug quick and dirty — 163
  • create a hypothesis — 163
  • reason about programs — 164
  • isolate value origins — 193
  • slice a program — 193
  • observe state — 232
  • encapsulate and reuse debugging code — 232
  • observe the final state of a crashing program — 233
  • explore execution history — 254
  • isolate value origins for a specific run — 254
  • track down an infection — 254
  • automate observation — 283
  • use assertions — 283
  • check a program against a reference program — 284
  • check memory integrity — 284
  • prevent memory errors in a low-level language — 284
  • determine abnormal behavior — 312
  • summarize behavior — 312
  • detect anomalies — 312
  • compare coverage — 312
  • sample return values — 312
  • collect data from the field — 312
  • determine invariants — 312
  • show causality — 326
  • find a cause — 327
  • find an actual cause — 327
  • isolate failure causes automatically — 352
  • isolate a failure cause in the input — 352
  • isolate a failure cause in the thread schedule — 352
  • isolate a failure-inducing code change — 352
  • understand how a failure cause propagates through the program run — 382
  • capture program states — 382
  • compare program states — 382
  • isolate failure-inducing program states — 382
  • find the code that causes the failure — 402
  • narrow down the defect along a cause-effect chain — 402
  • isolate the infection chain — 402
  • find the most likely origins — 402
  • correct the defect — 402
  • ensure your correction is successful — 403
  • avoid introducing new problems — 403
  • learn from mistakes — 403

Get the book at Amazon.com · Amazon.de
Comments? Write to Andreas Zeller <zeller@whyprogramsfail.com>.