2010-06-22 31 views
3

我最近切換到使用Visual Studio 2010.我遇到了STL類型的DataTips(調試器工具提示)加載不正確的問題。混合C++/CLI程序集中的Visual Studio 2010數據提示問題

例如,在下面的代碼:(|! 「你好,世界」 [+] ASTRING

int test(const std::string& inString) 
{ 
    std::string aString("Hello, World!"); 

    return aString.compare(inString); 
} 

我沒有得到預期的提示,而是得到類似[+ ] aString | {npos = 4294967295}

Ex。 alt text http://bordeaugrove.com/wrong.png

我測試了一些東西,我發現在我的本地(非託管)項目中,我沒有遇到問題。我遇到這個問題的項目是混合本機和C++/CLI DLL。

我知道在Visual Studio 2010中C++/CLI不支持Intellisense,但據我所知,這應該在調試器中工作。

我想知道如果我剛剛得到了一個損壞的安裝或不正確的設置的地方。

有人有什麼建議嗎?

+0

這是在一個優化的構建?我看到了同樣的問題,在標準庫容器如'std :: vector'的顯示完全錯誤的情況下,在本地代碼的發佈版本中。調試(禁用優化)構建總是很好。我認爲可視化器會採用特定的佈局,或者使用一些有條件定義的字段,並且只存在於調試版本中。 – 2010-07-31 02:23:17

回答

0

根據第一對here的評論,C++/CLI不支持VS2010 intellisense。第二個評論是由MS團隊的成員,他提供了一個合理化的。

+0

調試器洞察不是*智能感知* – 2010-07-31 02:21:12

0

根據"std-string-content-not-shown-in-the-debugger",這是由於混合使用VS 2005和VS 2010構建的庫而造成的。但可能有多種原因。

一個潛在的解決方法是將以下內容添加到您的監視窗口,其中messagestd::string

message._Bx._Ptr // use when the string is longer than 16 characters 
message._Bx._Buf // use when the string is less than or equal to 16 characters 

這些變量可以通過瀏覽STL源被發現或者,或者使用在監視窗口下面的展開對象,其中messagestd::string它允許瀏覽的對象的原始格式,忽略任何數據類型的定製視圖:

message,! 

更在部門h這個和其他觀察窗口格式說明符的解釋可以在Format Specifiers in C++找到。