[英]Execute a statement while debugging in Rust
在用 Python 编码时,我经常做类似的事情
test.py
x = []
breakpoint()
± |master U:5 ?:4 ✗| → python3 test.py
-> breakpoint()
(Pdb) x
[]
(Pdb) x.append(1)
(Pdb) x
[1]
是否可以在调试 Rust 时执行该语句?
use std::collections::HashMap;
fn main() {
let mut contacts = HashMap::new();
contacts.insert("Daniel", "798-1364");
contacts.insert("Ashley", "645-7689");
//set breakpoint here
}
到目前为止,我可以在调试控制台中执行p contacts
,这个输出的含义对我来说并不直接。 如果我想知道println!("{:?}", contacts);
的结果怎么办println!("{:?}", contacts);
无需在源文件中写入这行代码。
而且我还想知道contacts.insert("Robert", "956-1742")
,如果我在调试控制台中执行expr contacts.insert("Robert", "956-1742")
,它会说error: no field named insert
。
目前 lldb 和 gdb 对 Rust 调试的支持非常有限。 简单的表达式有效,任何更复杂的都可能导致问题。
我在使用rust-lldb
测试时的经验:
HashMap
上调用capacity()
,因为该函数不包含在二进制文件中。struct_value.method(&struct_value)
HashMap
)上调用单态方法的方法。"abcdef"
是一个包含尾随 NUL 字节的const char [7]
。 因此,它们不能轻易传递给需要&str
参数的 Rust 函数。尝试使用这样的辅助函数:
pub fn print_contacts(contacts: &HashMap<&str, &str>) {
println!("{:?}", contacts);
}
导致 lldb 崩溃:
(lldb) expr print_contacts(&contacts)
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: [...]
Segmentation fault: 11
所以现在看来你想做的事情是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.