无法使用 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 支持,但目前似乎没有得到积极维护。这里有更多信息:
我正在使用 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 支持,但目前似乎没有得到积极维护。这里有更多信息: