Due to the effects of optimization on variable location in executable programs that have been compiled with optimization, not all variables can be accessed by Prism at all times.
The accessibility of variables can be defined by whether the variables can be used in expressions that require the right value of the variable (such as print X, or call foo(X)) or the left value of the variable (such as assign X=1).
The limits of accessibility can be described by the flow of control in an optimized program. When the flow of control is in a routine compiled with both -g and an optimization flag:
If the control flow is at the first machine instruction of the routine (which has not yet been executed), then all global variables and the routine's arguments are accessible. No other local variable is accessible.
If the first machine instruction of the current routine has already been executed, then only the global variables are accessible. No local variable is accessible.
The following commands can use only accessible variables:
where - The where stack will display values only for accessible arguments, and `???' for all the others.
The where command reports all active stack frames which have a stack pointer. The where command does not report routines that have no frame pointer and routines that have been inlined.