LLDB-DAP Extensions#
lldb-dap implements the Debug Adapter Protocol (DAP). This page specifies what lldb-dap adds to the protocol, such as new requests and additional fields in protocol types.
Naming rules#
The
commandfield of an extension request must have the__lldb_prefix (e.g.__lldb_moduleSymbols).The
eventfield of an extension event must have the__lldb_prefix.An extension field on an official DAP type must have the
$__lldb_prefix (e.g.$__lldb_versiononCapabilities).A field of an extension type must not have a prefix. Extension types are the arguments, response body and event body of an extension request or event, and the types they use (e.g.
startIndexonModuleSymbolsArguments).
Summary#
Request |
Added in |
|---|---|
LLDB 11 |
|
LLDB 22 |
Custom Requests#
CompileUnits Request#
New in version 11.
The request is sent from the client to the debug adapter to list the compile
units of a module. Use it with compileUnitId of a StackFrame
and the id of a Module.
interface CompileUnitsRequest extends Request {
command: "compileUnits";
arguments: CompileUnitsArguments;
}
interface CompileUnitsArguments {
/**
* The UUID of the module.
*/
moduleId: string;
/**
* The compile units to return. If empty or omitted, all compile units of
* the module are returned.
* @format uint32
* @since LLDB 24
*/
compileUnitIds?: number[];
}
interface CompileUnitsResponse extends Response {
body: {
compileUnits: CompileUnit[];
};
}
interface CompileUnit {
/**
* The ID of the compile unit, unique within its module.
* @format uint32
* @since LLDB 24
*/
id: number;
/**
* The path of the compile unit.
*/
compileUnitPath: string;
/**
* The language of the compile unit, with its version where known, for
* example `c11` or `c++17`. Omitted if the language is unknown.
*/
language?: string;
/**
* True if the compile unit was compiled with optimization, false if it
* was unoptimized or unknown. Optional so a debugger can omit it when
* unknown, in which case clients should treat it as unknown.
*/
isOptimized?: boolean;
}
ModuleSymbols Request#
New in version 22.
The request is sent from the client to the debug adapter to list the symbols of
a module. It is only available if the capability supportsModuleSymbolsRequest
is true.
interface ModuleSymbolsRequest extends Request {
command: "__lldb_moduleSymbols";
arguments: ModuleSymbolsArguments;
}
interface ModuleSymbolsArguments {
/**
* The UUID of the module.
*/
moduleId: string;
/**
* The name of the module.
*/
moduleName: string;
/**
* The index of the first symbol to return. If omitted, starts at 0.
* @format uint32
*/
startIndex?: number;
/**
* The number of symbols to return. If count is missing or 0, all symbols
* are returned.
* @format uint32
*/
count?: number;
}
interface ModuleSymbolsResponse extends Response {
body: {
/**
* All symbols or range of symbols.
*/
symbols: Symbol[];
};
}
interface Symbol {
/**
* The ID of the symbol.
* @format uint32
*/
id: number;
/**
* The name of the symbol.
*/
name: string;
/**
* The size of the symbol in bytes.
* @format uint64
*/
size: number;
/**
* The symbol has debug information.
*/
isDebug: boolean;
/**
* The symbol was synthesized by the debugger.
*/
isSynthetic: boolean;
/**
* The symbol is visible outside of its module.
*/
isExternal: boolean;
/**
* The `lldb::SymbolType`, e.g. 'Code', 'Trampoline', 'Data'.
*/
type: string;
/**
* The address of the symbol in the module file.
* @format uint64
*/
fileAddress: number;
/**
* The address of the symbol in the process. Omitted if the module is not
* loaded.
* @format uint64
*/
loadAddress?: number;
}
Requests with Additional Properties#
Initialize Request#
interface InitializeRequestArguments {
/**
* Whether the adapter sources `lldbinit` files when initializing the
* debugger. Before LLDB 21 this was `sourceInitFile`.
* @since LLDB 21
*/
$__lldb_sourceInitFile?: boolean;
}
interface InitializeResponse extends Response {
body?: Capabilities;
}
interface Capabilities {
/**
* The version of lldb same as (`version` command). Before LLDB 21 this was
* `__lldb.version`.
* @since LLDB 21
*/
$__lldb_version?: string;
/**
* The debug adapter supports the `__lldb_moduleSymbols` request.
* @since LLDB 22
*/
supportsModuleSymbolsRequest?: boolean;
}
ExceptionInfo Request#
interface ExceptionInfoResponse extends Response {
body: {
/**
* The raw JSON from `SBThread::GetStopReasonExtendedInfoAsJSON`.
* @since LLDB 24
*/
$__lldb_stopReasonExtendedInfo?: any;
/**
* The raw JSON from `SBProcess::GetExtendedCrashInformation`.
* @since LLDB 24
*/
$__lldb_extendedCrashInformation?: any;
};
}
Types with Additional Properties#
Module#
interface Module {
/**
* The size of the module's debug information as a human readable string,
* e.g. '12.3 MB'.
* @since LLDB 12
*/
debugInfoSize?: string;
}
StackFrame#
interface StackFrame {
/**
* The compile unit of the frame. Use with `moduleId` in the `compileUnits`
* request.
* @format uint32
* @since LLDB 24
*/
$__lldb_compileUnitId?: number;
/**
* Language specific data about the frame, as returned by
* `SBFrame::GetLanguageSpecificData`, for example `Objective-C runtime
* version`. Each language runtime defines its keys and clients must ignore
* keys they do not know. Omitted if the runtime reports nothing.
*/
$__lldb_languageSpecificData?: any;
}