“Why debug at all?” One answer is that designing an embedded system is a fairly complex activity, involving hardware and software interfacing with environment – and few engineers get it exactly right the first time. Secondly, even well-designed systems will have unknown interactions when deployed. Third, there may be performance issues with the code. Even correctly running code may not be effective with rapid recurring interrupts. Alternately, the real time execution of code may not be as expected because of unpredictable behavior when external inputs are applied. Unit testing may or may not be a requirement of the design, However, to verify that each element is preforming according to design, the engineer may need debug functions to test the various modules across a range of controlled conditions. Finally, when the entire system is finished, tuning its overall performance may require a debugger to focus on time-critical sections of code.