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

x
will 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
@sp
will 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 == 4
will breakpoint when x is accessed and it's value is 4. Similarly the operators <, <=, >, >=, ==, != can be used. For example
@sp <= 0x1000
will 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) == 1
will 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.