Joy of Debugging, The : 9780134578729

Joy of Debugging, The

Cantrill & Pacheco
Published by
Pearson Higher Ed USA
Available once published
Title type
Our view is that debugging is an essential part of the craft of software development. By thinking of debugging as a primary endeavor, developers are liberated to be more rigorous about it and can afford the luxury of complete understanding. By considering debugging as opportunity rather than setback, developers can take a craftsman's pleasure in it, mastering its nuances and deriving intrinsic satisfaction from doing it well. This is the thesis of this book: that debugging must be rigorous and empirical -- but that within that rigor, software engineers can discover a joy unique in the craft.
Table of contents

Draft table of contents

Part 1: Foundations

* Introduction (embracing debugging as both a first-class part of our jobs as engineers, and as an enjoyable, rewarding part of the craft of software engineering)
* How software fails: taxonomy of failure (implicit and explicit, fatal and non-fatal)
* Understanding software failure: the scientific method (including the roles of reproducibility, for testing hypotheses and gathering data)

Part 2: Approaches

* In situ debugging
  -- Using Dynamic Tracing   --Logging
  -- Basic tools (e.g., finding information about what processes are doing?)
* Postmortem debugging (fatal failure)

Part 3: Specific expertise

These chapters start with narrative prose describing basic concepts, and then enumerate tips and techniques related to the problem space.

* Debugging memory issues in native code (corruption, use-after-free)
* Debugging resource exhaustion in native code
* Debugging multi-threaded programs
* Debugging in dynamic environments (including GC-related issues)
* Debugging the network (including TCP issues, jumbo frames, partitions)
* Debugging distributed systems
* Debugging performance issues
* Debugging psychotic issues

Part 4: Advanced topics

* Debugging-driven development (embracing debugging at development-time)
* What to do when you're stuck
* Debugging unfamiliar systems
* Debugging during an outage
* Building an organization for debugging
* Describing failure [rigorously, and the importance of it]

Features & benefits
  • Focuses on rigorously determining the root-cause of each defect
  • Covers complete taxonomy of failure (implicit and explicit, fatal and non-fatal)
  • Covers Debugging memory issues in native code, multi-threaded programs, distributed systems, and dynamic environments