Close
0%
0%

Debugger Dedicated to Embedded Systems

Compact Debugger is an embedded-specific debugger written entirely in pure C, designed for efficiency and low resource usage.

Similar projects worth following
Compact Debugger is an embedded-focused debugger written entirely in pure C. With a footprint of roughly 500 KB, it provides powerful debugging capabilities along with a reasonably elegant visualization interface based on TUI.

For any software development work—especially in the field of embedded systems—a good debugger is critically important, as it directly impacts debugging efficiency.

In embedded development, I personally dislike IDEs built on Eclipse, and I am also not a fan of environments based on VS Code. For commercial tools, I prefer products from IAR; KEIL is acceptable to some extent, but my real preference is an IDE that I build myself in C++. That said, today’s topic is debuggers, not IDEs, so let’s refocus on the debugger itself.

Among commercial embedded debuggers, I particularly like Ozone and TRACE32. In the open-source world, I find GDB acceptable, but it is overly large and lacks a well-designed native graphical interface. Because of this, I developed Compact Debugger, also known as CHAOS Debugger, which I will refer to as CB below.

CB is an embedded-focused debugger written entirely in pure C. With a footprint of roughly 500 KB, it provides powerful debugging capabilities along with a reasonably elegant visualization interface based on TUI. At this point, I consider CB to be in a beta stage, so I would like to present it to you and share what it can do. I hope you find it interesting.

Below are the main features of CB:

  • Supports heterogeneous multi-core debugging
  • Small, efficient, and lightweight, with no external dependencies beyond basic libraries
  • Built-in code browser, supporting navigation between header files and functions
  • Built-in chip database with automatic completion of full device part numbers
  • Direct support for J-LINK
  • Ability to browse related files by analyzing ELF files
  • Automatically exports BIN files from ELF and downloads them directly to the target processor
  • For libraries without source code, automatically switches to pure instruction view while still displaying function names
  • When execution stops inside a library without source code, supports running to the next C statement
  • Automatically records and displays branch/jump information within libraries without source code
  • Supports ATTACH to a target processor as well as CLOSE (disconnect) operations
  • Allows switching at any time within the same view between instruction-only, C-only, or mixed instruction/C display
  • Supports instruction-level stepping and C-statement stepping
  • Supports mixed instruction/C Step Into and Step Out
  • Breakpoints can be set by ADDRESS, FILE:LINE, or SYMBOL
  • Supports both graphical and command-line breakpoint configuration
  • Supports register breakpoints
  • Supports advanced data breakpoints (watchpoints)
  • Run-To operations can be set by ADDRESS, FILE:LINE, or SYMBOL
  • Supports both graphical and command-line Run-To configuration
  • Dynamically and continuously refreshed WATCH window
  • Dynamically and continuously refreshed MEMORY view
  • Advanced stack analyzer, allowing selection of call frames and switching stack content viewers and local variables
  • Built-in RTT terminal, supporting configurable content ranges and channels
  • The INFO area supports viewing historical records
  • …and more features such as status information, change highlighting, and additional enhancements

VIEWER.jpg

JPEG Image - 294.41 kB - 02/06/2026 at 08:29

Preview

STACK-2.jpg

JPEG Image - 217.72 kB - 02/06/2026 at 08:29

Preview

JUMP.jpg

JPEG Image - 265.80 kB - 02/06/2026 at 08:29

Preview

STACK-1.jpg

JPEG Image - 223.73 kB - 02/06/2026 at 08:29

Preview

STACK-3.jpg

JPEG Image - 247.26 kB - 02/06/2026 at 08:29

Preview

View all 16 files

  • Dual-core debugging example on RP2040

    CHAOS.TANG02/06/2026 at 10:35 0 comments

    The following animated image shows a dual-core debugging example on the RP2040.
    In this example, CORE0 executes several instructions and is then halted (as indicated by HALT in the status bar), while CORE1 continues running and continuously outputs data via RTT.

  • Code viewer

    CHAOS.TANG02/06/2026 at 10:26 0 comments

    The following animated image demonstrates how to use the code viewer.

    The code viewer provides two operating modes:

    • viewing the source file associated with the current debugging context
    • browsing all source files referenced by the ELF file.

    The code viewer allows you to select and open specific source files. It supports opening header files included by C source files and enables direct function navigation.

    Within the code viewer, the assembly code corresponding to C statements can be expanded and collapsed.

    In addition, the code viewer provides an advanced state-preserving navigation feature. You can open multiple source files, navigate between them, and expand or collapse C statements. When navigating back to previously viewed files, all prior viewing states and operations are automatically restored.

    You can also place breakpoints and perform Run-To operations directly within the code viewer.

  • Data watchpoints

    CHAOS.TANG02/06/2026 at 10:11 0 comments

    The animation below shows the usage of data watchpoints.

  • Register breakpoints

    CHAOS.TANG02/06/2026 at 10:09 0 comments

    The following animated image demonstrates how to use register breakpoints (register-based conditional breakpoints).

  • Graphical breakpoints and Stack analyzer

    CHAOS.TANG02/06/2026 at 10:05 0 comments

    The animation below shows graphical breakpoint placement during target execution and the use of the advanced stack analyzer after a breakpoint is triggered.
    Within the stack analyzer, specific call frames can be selected to inspect internal variables and stack memory.

  • Graphical breakpoints and Locals window

    CHAOS.TANG02/06/2026 at 10:02 0 comments

    The animation below shows graphical breakpoint placement during target execution and the use of the Locals window after a breakpoint is triggered.

    The Locals window explicitly marks parameters and local variables.

  • Memory window

    CHAOS.TANG02/06/2026 at 09:58 0 comments

    The animation below shows how the Memory window is used and how data is updated dynamically.

  • Watch window

    CHAOS.TANG02/06/2026 at 09:56 0 comments

    The animation below shows how the Watch window is used and how data is updated dynamically.

  • Viewing registers

    CHAOS.TANG02/06/2026 at 09:53 0 comments

  • Last breakpoint hit

    CHAOS.TANG02/06/2026 at 09:52 0 comments

    The animation below shows that, during continuous GO/BREAK cycles, the most recent break location is highlighted in a darker style in C, assembly, or mixed views.

View all 19 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates