The debugger can set breakpoints by evaluating simple C like expressions. The simplest expression supported is a symbol name. If the symbol name is a function then a breakpoint occurs when the first instruction of the symbol is about to be executed. If the symbol name is a variable then a breakpoint occurs when the symbol has been (target specific) accessed, this is termed a data breakpoint. For example the expression
xwill breakpoint when x is accessed. You can use a debug expression as a breakpoint expression. For example
x[4]will breakpoint when element 4 of the array x is accessed and
@spwill breakpoint when the sp register is accessed.
Data breakpoints can be specified to occur when a symbol is accessed with a specific value using the == operator. The expression
x == 4will breakpoint when x is accessed and it's value is 4. Similarly the operators <, <=, >, >=, ==, != can be used. For example
@sp <= 0x1000will breakpoint when the register sp is accessed and it's value is less than or equal to 0x1000.
You can use the operator & to mask the value you wish to breakpoint on. For example
(x & 1) == 1will breakpoint when x is accessed and it has an odd value.
You can use the operator && to combine comparisons. For example
(x >= 2) && (x <= 14)will breakpoint when x is accessed and it's value is between 2 and 14.
You can specify an arbitrary memory range using an array cast expression. For example
(char[256])(0x1000)will breakpoint when the memory region 0x1000-0x10FF is accessed.
You can specify an inverse memory range using the ! operator. For example
!(char[256])(0x1000)will breakpoint when the memory region other than 0x1000-0x10FF is accessed.