You can debug Rust programs in Visual Studio Code on Windows using LLDB.
On Windows, LLDB only works reliably with 32-bit binaries. As such, this guide will outline how to get debugging working for 32-bit targets.
To get this working:
-
Install LLDB. You can get it by installing the LLVM tools, but the current official LLVM installer for Windows does not include LLDB. You can get an installer including 32-bit LLDB here. You do not have to add LLDB to your system environment path.
-
LLDB requires python35.dll, which which can be downloaded here. As we are using a 32-bit version of LLDB, make sure to install the 32-bit version of Python 3.5 as well.You also do not have to add this version of Python to your system environment path.
-
If you do not have it already, install a 32-bit toolchain for Rust. You do not have to make it the default toolchain. In command prompt, execute:
rustup install stable-i686-pc-windows-gnu
To list your currently installed toolchains, excute:
rustup show
-
Install the CodeLLDB extension for Visual Studio Code. Restart Visual Studio Code. This enables support for LLDB.
-
If you did not add LLDB or Python 3.5 to your environment path, configure Visual Studio Code so the extension knows where to find them.You should set the LLDB executable to lldb.exe inside the bin folder where you installed LLVM.Set the Path executable environment variable to the folder where you installed 32-bits Python 3.5, followed by ;{$env:Path}. This tells LLDB where to find Python.
{ "lldb.executable": "C:\\Path\\To\llvm-6.0.0-r313613\\bin\\lldb.exe", "lldb.executable_env": { "Path": "C:\\Path\\To\\Python35;${env:Path}" } }
-
Add a debug launch configuration for your project. To open the Debug panel, hit Ctrl+Shift+D. Click on the dropdown, and choose “Add configuration…” Choose the LLDB Cargo Launch configuration. The settings depend on our project structure, but the following probably works:
{ "type": "lldb", "request": "launch", "name": "Debug Cargo LLDB", "sourceLanguages": ["rust"], "cargo": { "args": [ "+stable-i686-pc-windows-gnu", "build" ] }, "program": "${cargo:program}", "args": [] }
The argument
+stable-i686-pc-windows-gnu
tells cargo to use this specific 32-bit toolchain to compile your code with, regardless of your current default toolchain. This means you can debug with the 32-bit toolchain without setting it as your default.If you need to target a specific binary, add
"--bin=binary_name"
at the end of the cargo.args list. -
If you want to, you can additionally add
"debug.inlineValues": true
to your user or workspace settings to show values inside the editor. -
Place some breakpoints, then press Debug or hit F5!