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.

DAP Library

Reusable Debug Adapter Protocol (DAP) implementation written in C++. The CxxDbg DAP server is built on top of it.

LLDB Debugger

A modified fork of the LLDB debugger with advanced stepping functions, bug fixes, improvements for parsing debug information, and customization points.

Formatters Framework

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.

C++ Type Name Library

Library for parsing and formatting complex C++ type and function names. Improves detection of functions to step through or skip, and how function names are displayed in the debugger.

Roadmap

The project is in active development. The following directions define the planned work.

1

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.

2

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.

3

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.

4

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.

5

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.

6

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.