如何在visual studio调试器监视窗口(或其他地方)找到堆栈变量的地址?
读取变量可以正常工作:
streets streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >
但前缀为&amp;不给我一个地址:
&streets streets [11790](0x1c66a690 [...] std::vector<Street *,std::allocator<Street *> >
另外,尝试读取大小不起作用,为什么会这样?
streets.size() CXX0075: Error: Cannot set up Function Evaluation
程序以调试模式编译。
答案 0 :(得分:5)
Visual Studio调试器通过名为 autoexp.dat 的文件中的架构定义的转换来驱动调试器监视,快速监视,自动和本地变量视图(取决于您的VS版本,内容其中可以有显着差异)。该文件位于VS-InstallDir / Common7 / Packages / Debugger文件夹中(至少适用于VS2010和VS2012)。
了解这一点,您可以尝试/考虑几个想法:
方法一:图书馆专有技术
要访问向量中第一个元素的实际地址,我最终会这样做:
streets._Myfirst
如果您知道要查看的元素数量,可以使用数组扩展扩展名:
streets._Myfirst,N
其中N
是元素数量
注意:这仅适用于上面带矢量的情况。根据您使用的容器,实践会有所不同。毫无疑问,更简单的方法可能不太依赖于std :: vector&lt;&gt;的实现,但这是最简单的,我知道如何快速启动和调试。
方法二:焦土*
在工具/选项/调试/常规下,您可以打开和关闭功能列表。其中一个你会发现这个问题特别有用:
在变量窗口中显示对象的原始结构。
将此设置为以查看所有结构和容器的原始成员变量,包括标准容器,如std :: vector&lt;&gt;。这有效地禁用了 autoexp.dat
中模板的使用答案 1 :(得分:4)
要查看地址,请投放到void *
,如下所示:(void *)&streets
。
这是Visual Studio通过直接向您显示指向向量的尝试。类似的问题会影响向量数组。