Tested on macOS:
- Install the CodeLLDB VSCode extension. Unlike the debugger in the C/C++ extension, this allows to set breakpoints inside Zig "test" blocks (in the MS C/C++ extension debugger, breakpoints inside test blocks will be disabled once the debugger starts for unknown reasons.
- When compiling the test, tell it to also emit a binary:
zig test -femit-bin=zig-out/bin/my-test src/bla.zig
, otherwise there will be no executable to debug. - The compiled test executable expects the path to the Zig executable as first command line argument, the launch.json file
needs to be setup accordingly (note the
args
item):
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/zig-out/bin/my-test",
"args": ["/usr/local/bin/zig"],
"cwd": "${workspaceFolder}",
}
]
}
That should be all, now set breakpoints inside tests and start the debugger with F5.
My current setup is a combination of the VSCode Zig extension (https://marketplace.visualstudio.com/items?itemName=ziglang.vscode-zig) and CodeLLDB with the following vanilla launch.json:
Debugging and breakpoints work (on macOS). Only bug I see is a debug line mismatch at the end of scope blocks. Sometimes the debugger appears to step through or stop at the last line of an if-else else branch even though that else branch isn't taken.
For tests I simply install them as artifact, so that an executable file is created in the file system, and simply build them during
zig build
:https://github.com/floooh/chipz/blob/8dd374eb1e5605e1f86f0d3cd7206e8ddf1f29a5/tests/build.zig#L37-L56