Debugging with LLDB-MI on macOS
The debug adapter for the C/C++ extension utilizes the machine interface mode for both gdb and lldb. To use this interface in lldb, the extension utilizes lldb-mi
. The lldb-mi
executable was built from the GitHub lldb-mi repository and has a dependency on the LLDB.framework
, which is part of Xcode.
Prerequisites
The lldb-mi
executable requires LLDB.framework
to run.
How to obtain the LLDB.framework
You can get the LLDB.framework
one of two ways.
Xcode:
- Open the Apple App Store.
- Search for 'Xcode'.
- Select the Xcode application and then Install.
Xcode Command Line Tools:
- Open a terminal.
- Run
xcode-select --install
. - Confirm the prompt.
Example launch.json
Below is an example launch.json
debug configuration entry for lldb
:
"configurations": [
{
"name": "Launch (lldb)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
}
]
If you get a Developer Tools Access prompt
You may see a dialog saying "Developer Tools Access needs to take control of another process for debugging to continue."
If you get this prompt, you will have to enter your username and password to allow debugging.
If you want to permanently dismiss this prompt, you can run the following command in a terminal:
sudo DevToolsSecurity --enable
Additional configurations
Using an LLDB.framework not installed via Xcode
If you want to use an LLDB.framework that is not installed with Xcode, you need to:
-
Copy the
lldb-mi
executable in~/.vscode/extensions/ms-vscode.cpptools-<version>/debugAdapters/lldb-mi/bin
to the folder where theLLDB.framework
is located. -
Add the full path of
lldb-mi
tomiDebuggerPath
in yourlaunch.json
configuration.
For example, if you have the LLDB.framework
folder located at /Users/default/example/
, you would:
-
Copy
~/.vscode/extensions/ms-vscode.cpptools-<version>/debugAdapters/lldb-mi/bin/lldb-mi
into/Users/default/example/
. -
Add the following to your existing configuration:
"miDebuggerPath": "/Users/default/example/lldb-mi"
Using a custom-built lldb-mi
If you built your own lldb-mi
, you can use it by setting miDebuggerPath
to the full path of the executable.