c++ - Visual Studio 调试器监视问题

标签 c++ native visual-studio-debugging

如何在 visual studio 调试器监 window 口(或其他地方?)中找到堆栈上变量的地址

读取变量工作正常:

streets     streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

但是前缀为 & 并没有给我一个地址:

&streets        streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >

此外,尝试读取尺寸也不起作用,这是为什么?

streets.size()  CXX0075: Error: Cannot set up Function Evaluation   

程序在 Debug模式下编译。

最佳答案

Visual Studio 调试器通过名为 autoexp.dat 的文件中的架构定义的转换来驱动调试器监视、快速监视、自动和局部变量 View (取决于您的 VS 版本,内容其中可能会有显着差异)。该文件位于您的 VS-InstallDir/Common7/Packages/Debugger 文件夹中(至少它适用于 VS2010 和 VS2012)。

了解这一点后,您可以尝试/考虑一些想法:

方法一:图书馆专有技术

要访问第一个元素的实际地址,我最终只是这样做:

streets._Myfirst

如果您知道要查看的元素数量,则可以通过以下方式使用数组扩展扩展:

streets._Myfirst,N

其中N是元素的个数

注意:这仅适用于如上所示的 vector 。做法因您使用的容器而异。毫无疑问,有更简单的方法可能不太依赖 std::vector<> 的实现,但这是我知道如何让您快速启动和调试的最简单方法。


方法二:焦土

在 Tools/Options/Debugging/General 下是您可以打开和关闭的功能列表。您会发现其中一个对这个问题特别有用:

Show raw structure of objects in variable windows.

打开此ON 以查看所有 结构和容器的原始成员变量,包括标准容器如std::vector<>。这有效地禁止使用 autoexp.dat

中的模板

关于c++ - Visual Studio 调试器监视问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420650/

相关文章:

c++ - OpenCV 中 meanShiftFiltering 和 meanShiftSegmentation 的区别

c++ - 仅使用 LogonUser() 来验证凭据

Java : howto resolve java. lang.UnsatisfiedLinkError : no J3D in java. 库.path

c++ - Visual Studio 2013 调试器显示 std::string 的奇怪值

c++ - 如何摆脱这个链接错误?

c++ - 没有标准库的准系统 C++?

c# - VS 2010 - 输出窗口 - 如何启用 "find message in code"按钮?

c++ - Visual C++ 调试器不显示返回值

java - 从 C++ 源文件创建共享库

android - 如何从 flutter 插件 native 代码返回小部件?