Assertions are useful because they can catch problems early, before they’d otherwise be noticed. Ideally, each function should begin with a set of assertions that check its arguments for validity. (Initializers for functions’ local variables are evaluated before assertions are checked, so be careful not to assume that an argument is valid in an initializer.) You can also sprinkle assertions throughout the body of functions in places where you suspect things are likely to go wrong. They are especially useful for checking loop invariants.
Pintos provides the
ASSERT macro, defined in
<debug.h>, for checking assertions.
Tests the value of
expression. If it evaluates to zero (false), the kernel panics. The panic message includes the expression that failed, its file and line number, and a backtrace, which should help you to find the problem. See Backtraces, for more information.