如何在调试 MSVC ABI Rust 程序时检查变量值?

Posted

技术标签:

【中文标题】如何在调试 MSVC ABI Rust 程序时检查变量值?【英文标题】:How can I inspect variable values while debugging MSVC ABI Rust programs? 【发布时间】:2016-08-05 21:22:51 【问题描述】:

我已经下载了 Rust 1.7.0 的 MSVC ABI 版本,并按照文档中的猜谜游戏部分进行操作。

我注意到构建使用本机工具链(在我的例子中是 Visual Studio 2015 Update 2),因此生成本机 PDB(调试符号)可由本机调试器使用,例如 WinDBG、CDB 或 Visual Studio 调试器。我可以轻松设置断点,进入标准库源等等。

我不能做的是检查变量值。无论使用何种调试器,“Locals”显示都是空的。

据我所知,Visual Rust/RustDT IDE 在使用 GDB 或 LLDB 作为后端时显示本地,而不是使用原生 Windows 调试引擎。我不完全确定是否可以使用这些来调试为 MSVC ABI 编译的 Rust 程序(使用 PDB 等)。

如果我想获得必要的调试经验,我唯一的选择是切换到 GNU ABI 吗?除此之外,是否有一种简单的方法可以从原始调试工具(寄存器、内存映射)映射到 Rust 符号(变量值)?

【问题讨论】:

【参考方案1】:

功能在实施之前不存在。 Rust 建立在 LLVM 和 full PDB support has only recently been considered for LLVM 之上。目前 LLVM 只有有限的 PDB 支持,在 Clang project's MSVC compatibility page 中最好地描述了这些限制。在我看来,最好等到支持出现,尽管对于其他编程语言 interesting workarounds 已经实现。

【讨论】:

以上是关于如何在调试 MSVC ABI Rust 程序时检查变量值?的主要内容,如果未能解决你的问题,请参考以下文章

windows下用vscode调试rust

在 windows 上使用 clion 调试 rust 代码

[Rust]使用MSVC工具链和VSCode搭建Rust环境

等效于 abi.encodePacked

如何使用RUST做静态编译,让编译出来的程序不再依赖其他库?

使用 MSVC 调试类型