__conditional_software_breakpoint Macro

Trigger a software breakpoint if the argument is false.

Include

<assert.h>

Prototype

void __conditional_software_breakpoint(scalar expression);

Argument

expression
The expression to test.

Remarks

The expression evaluates to zero or non-zero. If non-zero, the macro evaluates to the do-nothing expression, ((void)0). If zero, a software breakpoint is triggered and execution will be suspended. If the target device does not support software breakpoints, a compiler error is triggered.

If the macro NDEBUG (see NDEBUG Macro) is defined or the macro __DEBUG is not defined at the point where <assert.h> is included, the __conditional_software_breakpoint() macro will evaluate to a void expression, ((void)0), and not suspend program execution. Inclusion of <assert.h> can occur multiple times, even in the same source file, and the action of the __conditional_software_breakpoint() macro for each inclusion will be based on the state of NDEBUG and __DEBUG at the point at which that inclusion takes place. Note that the __DEBUG macro is automatically set by the MPLAB X IDE when performing a debug (as opposed to a production) build.

Example

#include <xc.h>

int main(void)
{
  int a;

  a = 4;
#define NDEBUG        /* negate debugging - disable __conditional_software_breakpoint() functionality */
#include <assert.h>
  __conditional_software_breakpoint(a == 6);     /* no action performed, even though expression is false */

#undef NDEBUG         /* ensure __conditional_software_breakpoint() is active */
#include <assert.h>
  a = 7;
  __conditional_software_breakpoint(a == 7);     /* true - no action performed */
  __conditional_software_breakpoint(a == 8);     /* false - suspend execution for debug builds */
}