Our Book

The Book On How to Debug C/C++ Code

The Developer’s Guide to Debugging

T. Grötker, U. Holtmann, H. Keding, M. Wloka

Springer, 2008

Contents:

1. You Write Software: You have Bugs

2. A Systematic Approach to Debugging

3. Source Code Debuggers

4. Fixing Memory Problems

5. Profiling Memory Use

6. Solving Performance Problems

7. Debugging Parallel Programs

8. Finding Environment and Compiler Problems

9. Dealing with Linking Problems

10. Advanced Debugging

11. Writing Debuggable Code

12. How Static Checking Can Help

Reviews – Laurent Michel writes: “This book is unique in many respects. First, there is no other book I know of that covers the topic of program debugging…”
Read more in Examples, Reviews, Errata…

The Developer’s Guide to Debugging is a book for both professional software developers seeking to broaden their skills, and students that want to learn the skills of the trade from the ground up. Containing short examples and exercises, it is well suited to accompany a computer science course or lecture. At the same time it can be used as a practical reference guide for finding bugs.

This book goes beyond the level of simple source code debugging. It covers the most frequent real-world debugging scenarios, from the areas of program linking, memory access, parallel processing, and performance analysis. The book is completed by chapters on how to use static checkers and how to write code that leans well towards debugging.

While the book’s focus lies on C and C++, the workhorses of the software industry, one can apply many techniques described in The Developer’s Guide to Debugging to programs written in other languages.

Where to buy – Please refer to Google Book Search for preview pages and an up-to-date list of online booksellers.


Examples

Here are the source code examples from our book:


Errata

Errata list for “The Developer’s Guide to Debugging”, first printing, Aug. 2008.

If you find a bug in our book, please email us at authors@debugging-guide.com, so we can fix it in the next edition.

Chapter 4

p.43, first paragraph

Change “There is three common …” to “There are three common …”

Reported 9/17/08 by Christos Kontas

Chapter 7

p.91, section 7.2.2 log file code example beancounter.c

line 7, 10 Add (int) cast

line 12/13 Add return beans_arg;

Reported 8/29/08 by Markus Wloka

p.93 last paragraph.

Change “This is can be done …” to “This can be done …”

Reported 9/17/08 by Christos Kontas

p.94 last paragraph of 7.3

Change “Starting the program in a debugger will gets you …” to “Starting the program in a debugger will get you …”

Reported 9/17/08 by Christos Kontas

p.96 3rd paragraph of 7.4

Change “still in a experimental, but …” to “still in an experimental, but …

Reported 9/17/08 by Christos Kontas

Chapter 9

p.110, section 9.2, example. factorial.h is missing

Reported 12/29/08 by Jan Koslasz

p.121, section 9.6.4 code example test_file.cc line 9

Change delete a[]; to delete [] a;

Reported 8/29/08 by Markus Wloka

Chapter 10

p.140, section 10.5.1. Code example MyCLass.h, line 4.

Change MyClass::MyClass() { to MyClass() {

Reported 8/29/08 by Markus Wloka

p.160 2nd paragraph

Change “and by adding a new argument and between…” to “and by adding a new argument “and” between…”

Reported 9/17/08 by Christos Kontas

p.161 2nd paragraph

Change “Of course, It is also easy to corrupt …” to “Of course, it is also easy to corrupt …”

Reported 9/17/08 by Christos Kontas

Chapter 11

p.170, section 11.1.1.
Change “line brakes” to “line breaks”

Reported 12/29/08 by Jan Koslasz

Chapter 12

p.185, section 12.1.1. Compile command for myfile.cpp

Change > gcc -Wall myfile.cpp to > g++ -Wall myfile.cpp

Reported 8/29/08 by Markus Wloka

p.188 2nd paragraph

Change “Sometimes, execution it is no longer intended …” to “Sometimes, execution is no longer intended …”

Reported 9/17/08 by Christos Kontas

Appendix B

p.198, section B.3.1 Cygwin

Change “GDB, gprof, and Valgrind” to “GDB and gprof. Unfortunately, Valgrind is not part of Cygwin.” (17.02.11: Check this one)

Reported 11/28/08 by Markus Wloka