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

     2023-02-19     81

关键词:

【中文标题】如何在调试 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 已经实现。

【讨论】:

windows环境下使用clion调试rust提示msvctoolchainisnotsupported的解决方案

参考技术AClion调试Rust的时候出现如下提示,按照提示说明是因为不支持MSVC工具链。Rust在1.2版本开始默认使用MSVC工具链,可以重装Rust并选择使用GNU工具链来解决这个问题。执行rustup的时候选择自定义安装,询问hosttriple的时候填... 查看详情

windows下用vscode调试rust

... 2、根据rust用的版本,如果用的是x86_64-pc-windows-msvc,调试时选择C++(Windows),如果是x86_64-pc-windows-gnu,调试时选择C++(GDB/LLDB)。选择C++(Windows)时,会出现如下配置信息(launch.json),自己修改program,设置要调试的程序。(安装vi... 查看详情

发布和调试之间的 ABI 兼容性

】发布和调试之间的ABI兼容性【英文标题】:ABICompatibilitybetweenreleaseanddebug【发布时间】:2016-05-3114:19:18【问题描述】:在使用GCC时,考虑到我有时在发布时和有时在调试时编译同一个库,ABI是否保证兼容?(使用相同的编译器... 查看详情

MSVC 2015 AVX2 调试问题。并非所有 SIMD 通道都正确填充

】MSVC2015AVX2调试问题。并非所有SIMD通道都正确填充【英文标题】:MSVC2015AVX2debuggingproblems.NotallSIMDlanesarepopulatedcorrectly【发布时间】:2016-03-0109:57:52【问题描述】:我在VisualStudio2015更新1(针对Win10)中调试我的AVX2代码时遇到问题... 查看详情

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

...如果客户的电脑没有安装相应的依赖,那会运行不了,那如何让RUST程序自带干粮,不依赖这些七七八八的库呢?如果你用的是RUSTGNU版本,那可以直接发给客户,本身就自带了依赖项,不会有问题,本文主要说的是MSVC版本的RUST... 查看详情

在 MSVC++ 中检查字节码时遇到问题

】在MSVC++中检查字节码时遇到问题【英文标题】:TroubleexaminingbytecodeinMSVC++【发布时间】:2009-02-0621:36:07【问题描述】:我在工作中一直在使用免费的DigitalMars编译器(我知道很淘气),并创建了一些代码来检查编译的函数并查... 查看详情

在调试(c ++ MSVC)中提高flatbuffer性能的任何方法

】在调试(c++MSVC)中提高flatbuffer性能的任何方法【英文标题】:Anywaytoimproveflatbufferperformanceindebug(c++MSVC)【发布时间】:2016-03-1813:10:43【问题描述】:我正在公司中尝试使用平面缓冲区来替代原始结构。我们需要序列化的类相当... 查看详情

如何在 Rust 中调试内存问题?

】如何在Rust中调试内存问题?【英文标题】:HowdoIdebugamemoryissueinRust?【发布时间】:2016-11-1007:56:27【问题描述】:我希望这个问题不要太开放。我遇到了Rust的内存问题,我得到了an"outofmemory"fromcallingnextonanIteratortraitobject。我不... 查看详情

使用 MSVC 调试类型

...述】:考虑以下代码:template<classT>voidfoo()Tx;调试时如何找到x的类型?关注列表中添加typeid(x).name()无效。人们通常如何调试模板元编程?【问题讨论】:std::cout&lt;&lt;__PRETTY_FUNCTION__& 查看详情

Qt c++ 应用程序中的 Python 解释器 - numpy MSVC 调试

】Qtc++应用程序中的Python解释器-numpyMSVC调试【英文标题】:PythoninterpreterinQtc++application-numpyMSVCdebug【发布时间】:2018-03-0814:44:49【问题描述】:我正在开发一个在Windows上嵌入python解释器的Qt应用程序。我使用MSVC2015作为构建工具... 查看详情

[rust]使用msvc工具链和vscode搭建rust环境

...介绍Rust在Windows下开发环境的安装以及配置。1安装适用于MSVCABI的工具链在VS2019C/C++工具链官方网站出下载生成工具,并勾选VisualStudio生成工具进行下载安装即可注意:这个工具没有安装VisualStudio,仅仅安装了MSVC的工具链。2配置R... 查看详情

如何检查 pdb 文件是不是对调试程序集有效

】如何检查pdb文件是不是对调试程序集有效【英文标题】:howtocheckifpdbfileisvalidfordebugginganassembly如何检查pdb文件是否对调试程序集有效【发布时间】:2011-05-2212:32:51【问题描述】:我正在为学术目的符号源服务器编写一些逻辑。... 查看详情

在android与ios中使用lldb调试rust程序(代码片段)

...ust库交叉编译以及在Android与iOS中使用这篇内容,了解如何将Rust程序集成进Android或iOS。本篇的例子也是使用此篇的demo。不论是Android还是iOS,我们本篇的内容都使用CodeLLDB插件进行调试,所以你必须有安装VSCode和此插... 查看详情

(MSVC-2019)有没有办法在调试(自动)屏幕中查看使用 malloc 制作的数组元素?

...发布时间】:2021-02-2216:15:47【问题描述】:我最近学习了如何使用fscanf_s,在修改fscanf_s时,我编写了一个读取文件并将其保存到数组中的 查看详情

MSVC 中的拆解

...emanglinginMSVC【发布时间】:2012-12-0812:59:28【问题描述】:如何在MSVC中对名称进行解密?gcc中有abi::__cxa_demangle函数。在MSDN中,我找到了UnDecorateSymbolName:http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms681400%28v=vs.85%29.asp 查看详情

windows下使用gdb+vscode调试rust程序

在Windows下调试Rust程序,我就在这里写个简单的指南(以Rust1.10为例)。本文参考Stackoverflowhttp://stackoverflow.com/questions/33570021/how-to-set-up-gdb-for-debugging-rust-programs-in-windowsRust目前支持使用LLDB和GDB 查看详情

如何检查程序是不是使用调试符号编译? [复制]

】如何检查程序是不是使用调试符号编译?[复制]【英文标题】:Howtocheckifprogramwascompiledwithdebugsymbols?[duplicate]如何检查程序是否使用调试符号编译?[复制]【发布时间】:2011-03-1801:56:19【问题描述】:我想在GIMP中跟踪一些代码,... 查看详情

在运行时检查 asp.net Web 应用程序是不是处于调试模式的首选方法?

】在运行时检查asp.netWeb应用程序是不是处于调试模式的首选方法?【英文标题】:Apreferredwaytocheckifasp.netwebapplicationisindebugmodeduringruntime?在运行时检查asp.netWeb应用程序是否处于调试模式的首选方法?【发布时间】:2013-05-0311:06:19... 查看详情