2012-11-16 87 views
2

我怎样才能找到在Visual Studio调试器监视窗口中的堆栈变量的地址Visual Studio调试器关注的问题

读变量工作正常(或其他地方):

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 

该程序在调试模式下编译。

+0

&街道应该给你指向你的变量的指针,我怀疑观察窗口可以执行像vector :: size()这样的函数。 – marcinj

+2

@marcin_j:它可以,实际上。 VS观察窗非常强大。 –

+0

@JohnDibling很好,我将不得不与我的VS2005 – marcinj

回答

5

Visual Studio调试器通过在名为autoexp.dat(取决于您的VS版本,其中的内容可能显着变化)中的架构定义的翻译来驱动调试器监视,快速监视,自动和本地变量视图)。该文件位于VS-InstallDir/Common7/Packages/Debugger文件夹中(至少适用于VS2010和VS2012)。

知道了这一点,一对夫妇的想法,你尝试/考虑:

方法一:图书馆诀窍

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

streets._Myfirst 

如果你知道你要查看的元素的数量,可以通过使用数组膨胀延伸:

streets._Myfirst,N 

其中N是元件的数量

注:上面的载体所示的本只有作品。实践是不同的,这取决于你使用的是哪个容器。毫无疑问,更简单的方法可能更少依赖std :: vector <>的实现,但这是最简单的方法,我知道如何快速启动和调试。


方法二:焦土

在工具/选项/调试/一般是可以打开和关闭功能的列表。其中一个你会发现这个问题特别有用:

在变量窗口中显示对象的原始结构。

打开本ON所有结构和容器,包括标准容器比如std ::矢量<的原始成员变量>。这有效地禁用了autoexp中的模板的使用。dat

+1

检查方法之一很好,谢谢。当然,矢量大小可以通过输入'streets._Mylast - streets._Myfirst'来检索。不知道为什么'vector :: size()'不起作用,但是pah谁需要它。 –

4

要查看地址,请将其转换为void *,如下所示:(void *)&streets

这是Visual Studio试图通过直接向您显示指向的向量来帮助您。类似的问题会影响向量数组。

+0

那有用,欢呼声。 –