Only one of these four can be selected at a time. Normally, "As Global" is used for all expressions involving only global variables, "By Address" is used if the expression is a static variable, and "In Context" is used for most others. If the value to create the data explorer involves a procedure call, such as "array[fly()]", then "By Address" is employed.
Every time the debugger is about to update the data explorer (for instance when the target process hits a breakpoint) it reevaluates the expression named in the title bar. It attempts to evaluate the expression in the same context where it was first evaluated. For example, if a procedure is called since the data explorer was created, the debugger walks up the stack until it finds a stack frame with the right procedure and evaluates the expression there. If it cannot find such a stack frame, it displays an error.
Similar to "In Context", except it always evaluates to the current procedure at the top of the stack.
The debugger reevaluates the expression, ignores all procedure scopes, and only looks for variables in the global scope. This is useful if an expression involves only global variables.
The debugger pays no attention to the expression, and instead uses the last valid address for this data explorer to display the data. This is useful for examining local variables before and after they are in scope.