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
CHAOS.TANG









Brandon
Keith
Alexander R Pruss
f4hdk