You can use custom plug-in VIs to extend the on chip debugging (OCDI) debugging framework, which is compatible with the stabs format, to support various in-circuit emulators (ICE) and toolchains for your target. The following figure illustrates the OCDI debugging framework.

The core of the OCDI debugging framework is the debug database. The debug database contains a map of all possible signals, breakpoint, controls, and indicators in the physical memory of the embedded target. The debug database also contains line numbers and information for each node on the block diagram of the embedded VI.
When you build an embedded VI into an embedded application using OCDI debugging options, the LabVIEW C Code Generator generates C files from the block diagram.
The C parser parses every C file the LabVIEW C Code Generator generates for special comments to initialize the debug database with breakpoint, signal, and control records.
Your toolchain compiler outputs an intermediate object module and list files so the list parser can translate line numbers in the C code into relative symbol offsets. The list parser updates the line number to the function (name, offset) pair.
The linker generates a map file that contains the absolute addresses for all symbols. The map parser reads the map file the linker generates and resolves all symbols in the debug database by iterating through and updating all of the records in the debug database.
The debug database generates a LabVIEW map (LVM) file, which is an ASCII text file. The LVM file is the contents of the debug database and contains all of the information required to debug an embedded application without the source code and intermediate files.
The debug daemon loads the LVM file when the debugging session is initialized. The debug daemon communicates with the emulator using the OCDI Debugging plug-in VIs, which implement a low-level interface to a third-party emulator library.
simple_math.vi, shown in the following figure, is used as an example throughout the information about OCDI debugging.

You can use a JTAG, BDM, or NEXUS connection to perform on chip debugging of an embedded application.