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

cul*_*rón 5 rust lldb vscode-debugger

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

关于表达式的文档说有程序变量和结构的 Python 投影。

所以我检查了调试器中的情况,并设置了断点,但表达式不起作用。

变量部分,有ooo,它是一个列表,其中第 0 个元素具有id并且它的第 0 个元素具有我正在查找的值。但是,表达式/se ooo[0]['id'][0] == 135654667在 Python 调试器中引发 IndexError:IndexError: Index '0' is out of range

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

在此输入图像描述

我尝试过原生 Rust 表达式:

/nat ooo.id().inner_id() == 135654667
Run Code Online (Sandbox Code Playgroud)

输出是

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
Run Code Online (Sandbox Code Playgroud)

...尽管在真实的应用程序中该表达式确实有效:

let x = ooo.id().inner_id() == 135654667;
println!("{}", x);
Run Code Online (Sandbox Code Playgroud)

这会编译并打印 id。

我究竟做错了什么?

在此输入图像描述

Jim*_*ham 9

主线 lldb 对 Rust 的支持并不完整。特别是,表达式解析器只是 clang 表达式解析器(它不了解 Rust)。因此,它仅适用于也解析为 C 表达式的表达式(并使用相同的调用约定)。断点条件只是停止时计算的表达式。

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

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