2
use std::fmt::Debug;
use std::ops::Add;

fn main() {
    fn calculate<T:Debug + Add::<Output=T>, const N: usize>(data_set: [T; N]) -> (i32, i32) {
        // Key Code 
        let _var = data_set.get(0);
        println!("Output_1: {:?}", data_set.get(0)); 

        // Ignore
        return (0, 0)
    }

    let data = [1509, 1857, 1736, 1815, 1576];
    let result = calculate(data);
    println!("Output_2: {:?}", result);
}

我有一个非常简单的 rust 函数,它只是想获取传递给它的列表的第一个值。

我一直在尝试使用 VS 代码对其进行调试rust-analyser,但调试面板中的局部变量显示为重复 3 次,我不明白为什么会发生这种情况。

函数前的内存堆栈/堆/堆:

data: {1509, 1857, 1736, 1815, 1576}

进入函数后立即进行内存堆栈/堆/堆:

data_set: {1509, 1857, 1736, 1815, 1576}
data_set: {1509, 1857, 1736, 1815, 1576}
data_set: {1509, 1857, 1736, 1815, 1576}

我推断问题是由该行引起的,println!("Output_1: {:?}", data_set.get(0));因为通过删除它,重复项data_set's消失了。但是,坦率地说,我不明白为什么会导致问题。

此外,在执行 lineprintln!("Output_1: {:?}", data_set.get(0));时,值变得随机且极端,将内存堆栈/堆更改为

data_set: {1509, 1857, 1736, 1815, 1576}
data_set: {-445645856, 223, -445645856, 223, -445645856} // numbers are different each execution.
data_set: {1509, 1857, 1736, 1815, 1576}

有人可以解释为什么会这样吗?

如果有人能提出一个更好的标题也很好,因为我不知道如何描述这个问题。

4

1 回答 1

2

问题:

这是LLDB Debugger bug在最新版本 1.6.9 中引入的

解决方案:

回滚到 1.6.8 或更早版本应该可以暂时解决问题。

修复:

我已经在他们的 github 上向开发人员提出了这个问题https://github.com/vadimcn/vscode-lldb/issues/584

于 2021-11-24T03:24:06.890 回答