2012-11-16 85 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

那有用,歡呼聲。 –