Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Effective Debugging: Source Code

This repository contains the source code used in the book Effective Debugging (Addison-Wesley, 2016).

Chapter 1: High-Level Strategies

Item 7: Diversify Your Build and Execution Environment

Chapter 2: General-Purpose Methods and Practices

Item 12: Automate Complex Testing Scenarios

Chapter 4: Debugger Techniques

Item 31: Familiarize Yourself with Reverse Debugging

Item 33: Look for Errors by Examining the Values of Variables and Expressions

Item 37: Know How to View Assembly Code and Raw Memory

Chapter 5: Programming Techniques

Item 41: Add Logging Statements

Item 42: Use Unit Tests

Item 43: Use Assertions

Item 49: Fix the Bug's Cause, Rather Than Its Symptom

Chapter 6: Compile-Time Techniques

Item 50: Examine Generated Code

Item 51: Use Static Program Analysis

Item 52: Configure Deterministic Builds and Executions

Item 53: Configure the Use of Debugging Libraries and Checks

Chapter 7: Runtime Techniques

Item 57: Profile the Operation of Systems and Processes

Item 59: Use Dynamic Program Analysis Tools

Chapter 8: Debugging Multi-threaded Code

Item 60: Analyze Deadlocks with Postmortem Debugging

Item 61: Capture and Replicate

Item 62: Uncover Deadlocks and Race Conditions with Specialized Tools

Item 64: Investigate Scalability Issues by Looking at Contention

Item 65: Locate False Sharing by Using Performance Counters

Item 66: Consider Rewriting the Code Using Higher-Level Abstractions