无法使用 Rust 在 VSCode-LLDB 中创建条件断点

Can't create a conditional breakpoint in VSCode-LLDB with Rust

我正在使用 LLDB 在 VS-Code 中调试 Rust 程序。

documentation on expressions 说程序的变量和结构有一个 Python 投影。

所以我在调试器中查看它是什么样的,并设置了一个断点,但是表达式不起作用。

Variables 部分,有 ooo,这是一个列表,第 0 个元素具有 id,第 0 个元素的值为 I'我在找。但是表达式 /se ooo[0]['id'][0] == 135654667 在 Python 调试器中引发 IndexError:IndexError: Index '0' is out of range.

具有讽刺意味的是,当您在调试控制台中键入它时,它会起作用并建议一个表达式!

我试过原生 Rust 表达式:

/nat ooo.id().inner_id() == 135654667

输出为

Stopped due to an error evaluating condition of breakpoint 1.1: "ooo.id().inner_id() == 135654667"
Couldn't execute expression:
error: no field named id

...尽管在实际应用中表达式确实有效:

let x = ooo.id().inner_id() == 135654667;
println!("{}", x);

这会编译并打印 ID。

我做错了什么?

主线lldb对Rust的支持不完善。特别是,表达式解析器只是 clang 表达式解析器(它不知道 Rust)。所以它只适用于也解析为 C 表达式的表达式(并使用相同的调用约定)。断点条件只是在您停止时评估的表达式。

有一个 lldb 分支,具有更完整的 Rust 支持,但目前似乎没有得到积极维护。这里有更多信息:

https://github.com/rust-lang/lldb/wiki