在Visual Studio调试器中检查Rust变量时,为什么会得到“标识符未定义”或“不可用”的信息?

Chr*_*ing 12 debugging rust visual-studio-code

我已经设置了Visual Studio Code调试器并运行以下程序。

pub fn main() {
    let mut chars = "test".chars();
    match chars.next() {
        Some(c) => {
            println!("What is the value of c, here?");
            if c == 'c' {
                println!("c");
            }
        }
        None => {}
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在第6行设置一个断点,然后在“变量”和“监视”窗格中查找,则c不会求值,而是传递以下消息:identifier 'c' is undefined在Windows上<not available>使用cppvsdbg,在Linux上使用lldb。我已经确认,对于当前稳定的编译器版本,这会在Linux和Windows版本上发生。

我也将以下内容添加到Cargo.toml无济于事:

[profile.dev]
opt-level = 0
debug = true
Run Code Online (Sandbox Code Playgroud)

作为参考,这是VS Code编译器所需的我的launch.json文件:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) Launch",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/target/debug/test.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

用您选择的操作系统替换“(Windows)Launch”。

为什么会这样呢?是否有修复程序,或者应该添加一些编译器选项?

Mr.*_*jun 1

最近发布的 CodeLLDB 无法重现此问题。

CodeLLDB v1.7.0
rust : 1.60.0 (7737e0b5c 2022-04-04)
vscode: v1.67.0

调试视图显示一切都按预期工作

iter: {end:0x000055555559105f}
c: 't'
Run Code Online (Sandbox Code Playgroud)

将 codelldb 升级到指定版本即可解决该问题。