Watching Variables and Registers
================================

Debuggers offer several ways of viewing the state of a halted program. Global
variables are statically placed during link-time and can end up anywhere in the
RAM or Flash of the chip. These variables can be viewed when then target is
halted by the debugger through the Watch and Expression windows.

Unless removed due to optimizations, global variables are always available in
these views. Local variables or variables that are only valid inside a limited
scope are only viewable in that scope. Such variables can also be viewed with
the Watch or Expression views, and may also be automatically displayed when
breaking or stepping through code.


Considerations
--------------

Local variables are often placed in CPU registers and not on the
stack. These variables also have a limited lifetime even within the
scope in which they are valid. Depending on the optimization
performed, a variable placed in a register may not have a cohesive view of the current state of the variable. Some possible solutions are:

- Move the variable to global scope, so it remains accessible in RAM.

- Make the variable volatile, so the compiler doesn't place the value in a
  register.

- Make a shadow copy of the variable that is global and volatile.
