Every assembler instruction of an ARM processor can be executed as a conditional command. A C-compiler uses this feature to generate an optimized assembler code. During debugging of this C-code the program behavior can be interpreted in a misleading way, especially when using breakpoints and during single-stepping. For example, a piece of program code should be executed when an “if” condition is true but is executed independent from this condition. Looking only at the C-code doesn’t explain the program flow behavior. Debug tools are able to analyze the assembler instructions together with the processor status flags and to support the software developer during the debugging of programs written in high-level and assembler language.

Reprinted in its entirety from ARM IQ Vol. 4, No. 3, 2005