CxxDbg
CxxDbg is the open source C++ debugger built on top of LLDB with advanced features for debugging complex programs written in modern C++. Its goal is to improve the experience of debugging C++ programs and provide a set of reusable components for building C++ developer tools.
Components
CxxDbg consists of a set of components. Several of them are standalone libraries that do not depend on the debugger and can be reused in other tools.
cxxdbg — main repo containing the GUI, DAP Server, and Core Layer.
GUI
Customizable dockable interface built with Qt.
DAP Server
Debug Adapter Protocol server for editors and IDEs.
Core Layer
Composes all underlying components and makes them work together.
Reusable Debug Adapter Protocol (DAP) implementation written in C++. The CxxDbg DAP server is built on top of it.
A modified fork of the LLDB debugger with advanced stepping functions, bug fixes, improvements for parsing debug information, and customization points.
C++ debugger value/type formatting framework, with built-in formatters for libc++ and libstdc++. Does not depend on any debugger, and can be reused in other tools.
Features
The components work together and provide debugging features designed for modern C++ code.
Advanced stepping
Step through standard and user-defined functional objects directly to the call target, skipping standard library code.
Value formatters
Built-in formatters for libstdc++ and libc++, including lambdas and standard functional objects.
Call stack grouping
Frames of no interest are moved into child items, so user frames are not separated by library code.
Source code navigation
Open the definition of a variable, its type, or the target stored in a standard functional object.
Roadmap
The project is in active development. The following directions define the planned work.
Stable builds for all platforms
Stable versions for Linux, macOS, and Windows, covering both GCC and Clang and both libstdc++ and libc++, including recent versions of the compilers and standard libraries. A VS Code extension build is provided in addition to the standalone application.
Separate the GUI from the debugger core
Split the GUI and the debugger core into independent components that communicate over the Debug Adapter Protocol. The core runs as a standalone debug adapter and can be used by any DAP client.
Advanced features in the console debugger
Integrate all components directly into LLDB, so the command line debugger provides the same advanced features as the GUI: stepping functions, value formatters, and the type name parser.
New type system for LLDB
Replace the Clang type system used by LLDB with a type system based on the code model library (cm). The library provides a generic code model, which can be used to represent debug information. Provide debug information parsers that build the code model for all supported debug formats.
User-defined value formatters
Make it possible to write value formatters for the types of a specific project. Formatters are written in C++ on top of the formatters framework and built as separate modules, and are used by the debugger the same way as the built-in ones. Support for other languages is planned.
Complete the user interface
Refine the existing interface and add the parts that are still missing, including a disassembly view and a memory view. These views are required for low-level debugging, where source level information is not sufficient.