Debugging for Rust is available in CLion, IntelliJ IDEA Ultimate, PyCharm Professional, and GoLand.
LLDB provides a modern, high performance debugger framework and is the default debugger for macOS and iOS.
On Windows, go to Settings | Build, Execution, Deployment | Toolchain and set either Cygwin or MinGW as your working environment. Then, run rustup toolchain list and check the first line: it should be one of the gnu versions matching the bitness of the debugger.
I find a good level of usability with VS Code and the CodeLLDB extension:
Install VS Code
Search and install the extension Rust or the newer rust-analyzer from within VS Code
Check requisites and setup CodeLLDB for your platform. As of v1.6, no further setup should be needed.
Search and install the extension CodeLLDB from within VS Code
The LLDB Debugger added the main menu item "Run" from where the debugger can be started. When debugging is started for the first time, you must select the environment (the debugger): select LLDB.
When you select LLDB, a launch.json
file will be opened, if not, open it, it's under .vscode
folder
Your launch.json
should look like this:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceRoot}/target/debug/hello_world",
"args": [],
"cwd": "${workspaceRoot}/target/debug/",
"sourceLanguages": ["rust"]
}
]
}
If you wanted to keep things generic and only compile a binary that matches the cargo folder name, you could use ${workspaceRootFolderName} variable substitution for the "program" key:
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceRoot}/target/debug/${workspaceRootFolderName}",
"args": [],
"cwd": "${workspaceRoot}/target/debug/",
"sourceLanguages": ["rust"]
}
]
}
Here are some blog posts about Rust and VS Code:
Arch Linux
On Windows
The Rust compiler produces native binaries with native debug info (symbol) information, so any native debugger will do. That means gdb
and lldb
, or the Windows debuggers (WinDBG or just Visual Studio) if you're using the MSVC ABI version of Rust. If you want an integrated experience, RustDT is the way to go (setup on Windows: How to set up GDB for debugging Rust programs in Windows?). Please note that you're likely to run into How can I inspect variable values while debugging MSVC ABI Rust programs? on Windows and https://github.com/rust-lang/rust/issues/33062 on a Mac.
For a graphical debugger, there is gdbgui. It's available for Linux, Windows and MacOS. It uses the browser as the display and to interact with the debugger.
I have gdb 7.11
and rust-gdb
command seems to give more rust relevant information compared to the gdb native.
E.g. rust-gdb
shows rust objects properly with full names, and gdb simply do not show them.
In the following example gdb would now show at all the bold parts.
$1 = Args = {
inner = **ArgsOs** = {
inner = **Args** = {
iter = **IntoIter<std::ffi::os_str::OsString>** = {
buf = **NonNull<std::ffi::os_str::OsString>** = {
pointer = **NonZero<*const std::ffi::os_str::OsString>** = {
0x7ffff6c20060
}
},
phantom = **PhantomData<std::ffi::os_str::OsString>**,
cap = 1,
ptr = 0x7ffff6c20060, end = 0x7ffff6c20078},
_dont_send_or_sync_me = **PhantomData<*mut ()>**
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With