Chapter 2.17
Debugging and Unit Testing
"I know, as the prime lesson of my profession, that good intentions are the source of more folly than all other causes put together."
No matter what you do, how hard you try, your code will eventually break. You, or someone else maintaining your code, will make a mistake, or overlook that one use-case that brings your whole program down. It happens. Software is fragile by nature, and programmers are only human. So remember this: the debugger is your friend. It's only there to help you.
You've seen the interactive debugger enough times by now to have a general idea how it works, but Lisp has a lot more tools to help you debug as you go; you've already seen how to write and handle Conditions in Chapter 2.11---but that's just a small piece of a much bigger puzzle.
Exercise 2.17.1
The Debugger
Exercise 2.17.2
Control Stack
Exercise 2.17.3
Backtrace
Exercise 2.17.4
Restarts
Exercise 2.17.5
Stepping
Exercise 2.17.6
LDB, the low-level debugger
Exercise 2.17.7
More LDB
Exercise 2.17.8
Even More LDB
Exercise 2.17.9
Writing Tests
Exercise 2.17.10
Regression Testing with FiveAM
Exercise 2.17.11
More FiveAM
Exercise 1.17.12
Even More FiveAM
Extra Credit Exercise 2.17.13
Interactive Debugging in Emacs+SLIME