mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
docs: Add documentation on how to use VSCode to debug systemd via mkosi
This commit is contained in:
parent
218262c0b1
commit
66dc9b4634
@ -245,3 +245,83 @@ the cached images are initialized (`mkosi -i`).
|
|||||||
|
|
||||||
Now, your editor will start clangd in the mkosi build image and all of clangd's features will work as
|
Now, your editor will start clangd in the mkosi build image and all of clangd's features will work as
|
||||||
expected.
|
expected.
|
||||||
|
|
||||||
|
## Debugging systemd with mkosi + vscode
|
||||||
|
|
||||||
|
To simplify debugging systemd when testing changes using mkosi, we're going to show how to attach
|
||||||
|
[VSCode](https://code.visualstudio.com/)'s debugger to an instance of systemd running in a mkosi image
|
||||||
|
(either using QEMU or systemd-nspawn).
|
||||||
|
|
||||||
|
To allow VSCode's debugger to attach to systemd running in a mkosi image, we have to make sure it can access
|
||||||
|
the container/virtual machine spawned by mkosi where systemd is running. mkosi makes this possible via a
|
||||||
|
handy SSH option that makes the generated image accessible via SSH when booted. The easiest way to set the
|
||||||
|
option is to create a file 20-local.conf in mkosi.default.d/ and add the following contents:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Host]
|
||||||
|
Ssh=yes
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, make sure systemd-networkd is running on the host system so that it can configure the network interface
|
||||||
|
connecting the host system to the container/VM spawned by mkosi. Once systemd-networkd is running, you should
|
||||||
|
be able to connect to a running mkosi image by executing `mkosi ssh` in the systemd repo directory.
|
||||||
|
|
||||||
|
Now we need to configure VSCode. First, make sure the C/C++ extension is installed. If you're already using
|
||||||
|
a different extension for code completion and other IDE features for C in VSCode, make sure to disable the
|
||||||
|
corresponding parts of the C/C++ extension in your VSCode user settings by adding the following entries:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"C_Cpp.formatting": "Disabled",
|
||||||
|
"C_Cpp.intelliSenseEngine": "Disabled",
|
||||||
|
"C_Cpp.enhancedColorization": "Disabled",
|
||||||
|
"C_Cpp.suggestSnippets": false,
|
||||||
|
```
|
||||||
|
|
||||||
|
With the extension set up, we can create the launch.json file in the .vscode/ directory to tell the VSCode
|
||||||
|
debugger how to attach to the systemd instance running in our mkosi container/VM. Create the file and add the
|
||||||
|
following contents:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "cppdbg",
|
||||||
|
"program": "/usr/lib/systemd/systemd",
|
||||||
|
"processId": "${command:pickProcess}",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "systemd",
|
||||||
|
"pipeTransport": {
|
||||||
|
"pipeProgram": "mkosi",
|
||||||
|
"pipeArgs": [
|
||||||
|
"-C",
|
||||||
|
"/path/to/systemd/repo/directory/on/host/system/",
|
||||||
|
"ssh"
|
||||||
|
],
|
||||||
|
"debuggerPath": "/usr/bin/gdb"
|
||||||
|
},
|
||||||
|
"MIMode": "gdb",
|
||||||
|
"sourceFileMap": {
|
||||||
|
"/root/build/../src": {
|
||||||
|
"editorPath": "${workspaceFolder}",
|
||||||
|
"useForBreakpoints": false
|
||||||
|
},
|
||||||
|
"/root/build/*": {
|
||||||
|
"editorPath": "${workspaceFolder}/mkosi.builddir",
|
||||||
|
"useForBreakpoints": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Now that the debugger knows how to connect to our process in the container/VM and we've set up the necessary
|
||||||
|
source mappings, go to the "Run and Debug" window and run the "systemd" debug configuration. If everything
|
||||||
|
goes well, the debugger should now be attached to the systemd instance running in the container/VM. You can
|
||||||
|
attach breakpoints from the editor and enjoy all the other features of VSCode's debugger.
|
||||||
|
|
||||||
|
To debug systemd components other than PID 1, set "program" to the full path of the component you want to
|
||||||
|
debug and set "processId" to "${command:pickProcess}". Now, when starting the debugger, VSCode will ask you
|
||||||
|
the PID of the process you want to debug. Run `systemctl show --property MainPID --value <component>` in the
|
||||||
|
container to figure out the PID and enter it when asked and VSCode will attach to that process instead.
|
||||||
|
Loading…
Reference in New Issue
Block a user