gpt4 book ai didi

debugging - 在 Rust 中调试时执行语句

转载 作者:行者123 更新时间:2023-12-04 12:28:56 36 4
gpt4 key购买 nike

在用 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);的结果怎么办?无需在源文件中写入这行代码。
我也想知道 contacts.insert("Robert", "956-1742")的结果, 如果我执行 expr contacts.insert("Robert", "956-1742")在调试控制台中,显示 error: no field named insert .

最佳答案

目前 lldb 和 gdb 对 Rust 调试的支持非常有限。简单的表达式有效,任何更复杂的都可能导致问题。
我在使用 rust-lldb 测试时的经验:

  • 表达式解析器只能理解 Rust 的一个有限子集。不支持宏。
  • 未使用的函数不包含在生成的二进制文件中。例如。您无法拨打 capacity()HashMap在调试器中,因为该函数不包含在二进制文件中。
  • 必须像这样调用方法:struct_value.method(&struct_value)
  • 我还没有找到在通用结构(如 HashMap )上调用单态方法的方法。
  • lldb 表达式中的字符串常量 "..."被创建为 C 风格的字符串常量,例如"abcdef"const char [7]包括尾随的 NUL 字节。因此,它们不能很容易地传递给期望 &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
    所以现在看来​​你想做的事情是不可能的。

    关于debugging - 在 Rust 中调试时执行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68232945/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com