在用 Python 编码时,我经常做类似的事情
\ntest.py
x = []\nbreakpoint()\nRun 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]\nRun 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}\nRun 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)
所以看来你现在想做的事是不可能的。
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |