DEBUG flag - when true, tracing will be enabled, when false, tracing will be disabled and in
addition, the compiler is smart enough to remove blocks it knows can never be reached, so the
debugging code in effect is never compiled into the executable, with no overhead.