In this part, we show how to observe executions – by tracing, by interactively debugging, and more.
Tracing Executions presents a number of ways to observe executions by logging locations and program states – and by narrowing these down to specific conditions and events.
How Debuggers Work shows how to build an interactive debugger, allowing you to explore program executions at will.
In Asserting Expectations, we show how to have the computer check for errors at runtime – including pesky memory errors in C and similar languages.
Debugging Performance Issues shows how to detect which parts of a program require most resources.