调试Rust时如何不修改代码友好查看Vec<T>或HashMap指针指向的内容
调试Rust时如何不修改代码友好查看Vec或HashMap指针指向的内容
我太懂这种调试时的憋屈了!就像你贴的这段代码:
fn main() { let mut _tmp : Vec<String> = vec![ String::from("test") ]; let some_ref = &_tmp; println!("{:#?}", some_ref);//breakpoint here println!("{:#?}", _tmp) }
断点打在println!("{:#?}", some_ref);这行时,在VS Code的Local窗口里看some_ref,只能看到一堆(?),根本看不到Vec里的实际内容,又不想为了临时看个值就改代码加clone重新编译——毕竟调试大项目的时候,编译一次太费时间了。
给你分享两个实用的小技巧,完全不用改代码:
用Watch窗口可视化查看:
在VS Code的调试面板里找到Watch区域,点击加号,输入*some_ref,回车之后就能像查看普通Vec变量一样展开这个引用指向的内容了,元素、长度、容量这些信息都能直观浏览,比在Debug Console敲命令舒服多了。如果是&HashMap这类容器引用,同样输入*your_hashmap_ref就行,嵌套结构也能逐层展开。优化Debug Console的查看体验:
你已经发现用p *some_ref能在Debug Console里看到内容,但其实可以加个格式化参数让输出更美观,比如用p -r *some_ref(如果用的是LLDB调试器),这样输出会带缩进和层级,可读性会提升不少,不过还是不如Watch窗口的可视化浏览方便。
这些方法都是在调试会话里临时操作,完全不需要修改源代码,特别适合你那种“就在调试现场,只想快速看值”的场景。
内容来源于stack exchange
相关产品推荐
相关产品推荐

