Update winedbg GDB proxy support

The GDB proxy now seems to work again, but only in remote sessions.
This commit is contained in:
Robbert van der Helm
2021-01-02 18:21:18 +01:00
parent 1b47522de8
commit 26c04cf246
2 changed files with 17 additions and 18 deletions
+13 -13
View File
@@ -639,20 +639,20 @@ within loaded VST plugin itself.
### Attaching a debugger
When needed, I found the easiest way to debug the plugin to be to load it in an
instance of Carla with gdb attached:
```shell
env YABRIDGE_DEBUG_FILE=/tmp/yabridge.log YABRIDGE_DEBUG_LEVEL=2 carla --gdb
```
Doing the same thing for the Wine VST host can be a bit tricky. You'll need to
launch winedbg in a seperate detached terminal emulator so it doesn't terminate
together with the plugin, and winedbg can be a bit picky about the arguments it
accepts. I've already set this up behind a feature flag for use in KDE Plasma.
Other desktop environments and window managers will require some slight
modifications in `src/plugin/host-process.cpp`. To enable this, simply run:
To debug the plugin you can just attach gdb to the host as long as any
sandboxing or out of process hosting is disabled (or you'll have to wrap around
that host process). Debugging the Wine plugin host is a bit more difficult. Wine
comes with a GDB proxy for winedbg, but it requires a little bit of additional
setup and it doesn't support arguments containing spaces. To make this a bit
easier, yabridge includes winedbg support behind a build option. You can enable
this using:
```shell
meson configure build --buildtype=debug -Dwith-winedbg=true
```
Currently winedbg's normal GDB proxy is broken, so this option will start a
remote GDB server that you have to connect to. You can use `gdb build/yabridge-host.exe.so` to start GDB, and then use the GDB `target` command
printed to STDERR or `$YABRIDGE_DEBUG_FILE` to start the debugging session. Note
that plugin names with spaces in the actual `.dll` or `.vst3` file name will
have to be renamed first for this appraoch to work.
+4 -5
View File
@@ -41,11 +41,10 @@ template <typename... Args>
bp::child launch_host(fs::path host_path, Args&&... args) {
return bp::child(
#ifdef WITH_WINEDBG
// This is set up for KDE Plasma. Other desktop environments and
// window managers require some slight modifications to spawn a
// detached terminal emulator.
"/usr/bin/kstart5", "konsole", "--", "-e", "winedbg", "--gdb",
host_path.string() + ".so",
// Use the terminal output or `$YABRIDGE_DEBUG_LOG` to get yabridge's
// output, and use the printed target command in a GDB session where you
// load the yabridge `.so` file you're trying to debug
"/usr/bin/winedbg", "--gdb", "--no-start", host_path.string() + ".so",
#else
host_path,
#endif