In-Circuit Debuggers (ICDs) are tools used to debug embedded applications on microcontrollers and other embedded computer systems. An ICD allows the user to connect to and debug the application, verifying and troubleshooting the application, inserting breakpoints, and monitoring changes in the values of specific variables within the code. This debugging can be performed both during the development phase of the application and during its execution.
ICDs often include a combined hardware and software interface which allows for debugging, flash programming, and so on. Some ICDs offer a target-side memory scan capability, allowing the device to display the contents of individual memory locations. This can be useful in spotting fluctuations in the device's memory usage and in verifying the accuracy of values stored in memory. Other debugging capabilities include instruction tracing, which can help locate and locate errors in the code.
In addition to debugging, ICDs offer a number of other features, such as boot-up diagnostics, integration with debuggers and JTAG-based system emulation, single-step debug feature, and even a library of code snippets and examples. By making development easier, ICDs can help companies speed up their development time and reduce the cost of production.