在用 Python 编码时,我经常做类似的事情
\ntest.py
x = []\nbreakpoint()\n
Run Code Online (Sandbox Code Playgroud)\n\xc2\xb1 |master U:5 ?:4 \xe2\x9c\x97| \xe2\x86\x92 python3 test.py \n-> breakpoint()\n(Pdb) x\n[]\n(Pdb) x.append(1)\n(Pdb) x\n[1]\n
Run Code Online (Sandbox Code Playgroud)\n是否可以在调试 Rust 时执行该语句?
\nuse std::collections::HashMap;\n\nfn main() { \n let mut contacts = HashMap::new();\n\n contacts.insert("Daniel", "798-1364");\n contacts.insert("Ashley", "645-7689");\n //set breakpoint here\n}\n
Run Code Online (Sandbox Code Playgroud)\n到目前为止,我可以p contacts
在调试控制台中执行,但这个输出的含义对我来说并不直接。如果我想知道println!("{:?}", contacts);
不在源文件中写入这行代码的结果怎么办?
而且我还想知道结果contacts.insert("Robert", "956-1742")
,如果我expr contacts.insert("Robert", "956-1742")
在调试控制台中执行,它会说error: no field named insert
。
目前 lldb 和 gdb 的 Rust 调试支持都非常有限。简单的表达式可以工作,任何更复杂的表达式都可能会导致问题。
我在测试时的经验rust-lldb
:
capacity()
,HashMap
因为该函数不包含在二进制文件中。struct_value.method(&struct_value)
HashMap
)。"abcdef"
a 。const char [7]
因此它们不能轻易地传递给需要&str
参数的 Rust 函数。尝试使用这样的辅助函数:
pub fn print_contacts(contacts: &HashMap<&str, &str>) {
println!("{:?}", contacts);
}
Run Code Online (Sandbox Code Playgroud)
导致 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
Run Code Online (Sandbox Code Playgroud)
所以看来你现在想做的事是不可能的。