Category: Debugging

The Debugging Book

Author Andreas Zeller
Format online HTML
Price free

This work is designed as a textbook for a course in software debugging; as supplementary material in a software testing or software engineering course; and as a resource for software developers. It covers fault localization, program slicing, input reduction, automated repair, and much more, illustrating all techniques with code examples that you can try out yourself.

This book is work in progress, with new chapters being released every week. At the time of this post, not all chapters mentioned below have been released.

Continue reading

Systemic Software Debugging

Systemic Software Debugging

Systemic Software Debugging

Author Per Mellstrand and Björn Ståhl
Format PDF
Price free

Systemic Software Debugging is a light-hearted introduction to the wonderful world of, well, systemic debugging, i.e. chasing down those pesky problems that you won’t find by single- stepping through ten lines of code or taking a peak at the back-trace of a core dump. The kinds of issues that seem to magically appear after software gets even a flicker of a chance to grow out of proportion, when the build system takes a life of its own or when you have to keep a ten year old release of a compiler around just because that was the one version that managed to produce a binary that almost lived up to expectations.

This work was initially written in 2009-2010 for the use as supplementary reading material part of a seminar- oriented course in systemic debugging with a target audience of engineers and senior engineers at Sony Mobile Communications (formerly Sony Ericsson), constrained to about 150 pages with the goal of introducing as much of the notion of the systemic side of debugging as possible. It is published in a free and open form (CC-BY-3.0) in the hopes that it might be useful to other curious souls out there.

Continue reading

No Bugs!: Delivering Error-Free Code in C and C++

  • Author: David Thielen
  • Format: PDF
  • Price: free

Most developers know that software is inherently buggy.  And most developers also, hopefully, want to eliminate these bugs before shipping a product.  This book is written for these people.

However, writing code with no major bugs (sorry, we haven’t yet reached the point of truly bug-free code yet), is a team effort.  It takes the work of more than just the developers.  It takes testers,  managers, support personnel, and many more.  And this book is aimed at these people too.

This book is designed to solve a problem – buggy code.  Because it is aimed at the problem instead of a specific audience (ie, just developers or just testers), parts of this book may not be interesting to certain audiences.  Chapters 3 – 10 are written mainly for developers.  Chapters 11 & 12 are written mainly for testers.

Yet the book is written to be read straight through.  If you want to develop minimally buggy code, then you have to understand all of the pieces that go into getting there.  Developers need to understand the test process.  Testers need to understand what the developers will be testing on their own. Most importantly, the managers and others responsible  for insuring that the whole organization works need to understand the process.  And as important, they need to insure that the process is actually being followed.

Finally, this book is written from the Windows/DOS/PC perspective.  While most of the ideas discussed are generic to any computing platform, many of the implementations are specific to the PC.  And some of the code is specific not only to the PC, but to specific compilers (stack checking has a tendency to be that way).

If you program on a platform other than the PC, in a language other than c, you will still find this book valuable but you will also find that it leaves a lot more work for you to incorporate the ideas here.

While this is an older book, written in the Win95 era, the first 2 chapters are still very relevant to the programmers of today.

Chapters include:

  • Introduction
  • What is a bug?
  • General Principles
  • Some Basic Tricks
  • Assert the World
  • Debug Printfs
  • Watching the Stack
  • Watching the Heap
  • File I/O
  • Special Tricks for c++
  • Special Tricks for assembly language
  • The Testing Process
  • Shipping the Product
  • Useful bug-discovery tools
  • Debug Message Boxes
  • Debug Second Monitor

Get the Book: No Bugs!
Get the additional disk content