Visual Studio Debugger观察问题

时间:2012-11-16 16:34:53

标签: c++ native visual-studio-debugging

如何在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   

程序以调试模式编译。

2 个答案:

答案 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通过直接向您显示指向向量的尝试。类似的问题会影响向量数组。