Chapter 15. Debug-On-Error Strategy

By this time you probably have your program written and containing a lot of sanity checks, some permanent and some temporary. Now it is time to test it. Let’s go bug hunting, one bug at a time. Our testing algorithm is very simple:

  1. Run your code with sanity checks on, trying to cover all possible cases.

  2. If any sanity check fails, fix the code and return to step 1.

  3. If you’ve made it to step 3, you can be reasonably sure your code works correctly. Well done!

In my personal experience, this strategy makes testing a much faster, more efficient, and more enjoyable procedure than it would otherwise be, when your code does strange things and does not provide any explanation for its behavior. All you have to do to make this process effective is to insert enough sanity checks in your code while writing it and to make them as informative as possible. In short, the more sanity checks you have in your code, the more you can guarantee that it works correctly after it has passed all the checks.

Let’s consider how the SCPP_TEST_ASSERT macro can be switched on. Take a closer look in the file scpp_assert.hpp, where it is defined:

#ifdef _DEBUG
#  define SCPP_TEST_ASSERT_ON
#endif

#ifdef SCPP_TEST_ASSERT_ON
#  define SCPP_TEST_ASSERT(condition,msg) SCPP_ASSERT(condition, msg)
#else
#  define SCPP_TEST_ASSERT(condition,msg) // do nothing
#endif

If you compile your project in debug mode, a symbol named _DEBUG is defined during compilation (this might be compiler-dependent, ...

Get Safe C++ now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.