When the control flow is inside a routine that has been compiled with both -g and an optimization option (a debuggable optimized routine), the next and step commands change their behavior:
next steps out of the current routine and stops in the next debuggable routine that differs from the original routine.
step stops in the next debuggable routine (including recursive calls of the original routine).
You can set breakpoints using the stop at command inside debuggable optimized routines only at the first line of such a routine. If the routine name is foo and the first instruction in foo is ADDR_INSTR then the breakpoint is set as if you had used stop in foo or stopi at ADDR_INSTR.
Note that the following (related) commands are unaffected:
nexti
stepi
stopi
When the control flow returns to a debuggable optimized routine, as a result of one of the following commands:
return
stepout
then Prism assumes that the current position is at the first line of the current routine. Prism makes the same assumption when the source file position (at the command line or in the GUI) is updated as a result of up or down commands ending in a debuggable optimized routine.