2012-08-29 52 views
0

在Visual C++ 2010,考慮以下因素:如何在Watch窗口中看到本地類的成員值?

#include "stdafx.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    struct MyClass 
    { 
    MyClass() : mMember(0) 
    {} 

    void Func() 
    { 
    int tmp = 0; 
    tmp++; 
    } 

    private: 
    int mMember; 
    }; 

    MyClass inst; 
    inst.Func(); 

    return 0; 
} 

內Func鍵(步驟),並轉到手錶窗格和觀看成員變量mMember。而不是看到它的價值,你會看到錯誤

CXX0033: Error: error in OMF type information

是否有可能讓調試器顯示成員的值?如果是這樣,怎麼樣? 我知道這可能是一個錯誤,我已經在Microsoft Connect上報告過它,現在我正在尋找一種解決方法(不涉及將函數範圍外的定義移動)以及爲什麼會發生這種情況的解釋。 我提交的bug報告可以在這裏找到: https://connect.microsoft.com/VisualStudio/feedback/details/760149/visual-c-2010-cant-view-local-class-members-in-debugger-cxx0033-error-error-in-omf-type-information

編輯:我完全正常功能外工作範圍定義識別類。

編輯2:引用已經提交併確認的微軟提供的此問題,對於成爲可接受的答案將有很長的路要走。我已經搜索了一個,沒有發現。

回答

1

這是一個錯誤,VS2008也有它,但它已在VS2012中修復,所以它們一定會很快關閉您的反饋文章。

解決方法將變得困難,調試器沒有類型信息。這也讓它放棄了手表上的鬼魂。從技術上講,你可以使用Debug + Windows + Memory + Memory1並在Address表達式中輸入「this」。 「somevarname」是第一個成員,結構沒有v表,所以你不會找到值。很明顯,這並不是很好。

+0

謝謝,你的回答證實了我的懷疑。你可能會發佈一個指向你所指的錯誤報告的鏈接嗎?謝謝! 此外,不幸的是,真實生活場景確實有一個V-表,但是你提出的解決方案仍然很有趣。 – EddieBytes

+0

只是測試了這一點,它確實已在VS2012中得到修復 – EddieBytes

0

將您的MyClass結構放在主循環之外。否則,調試信息不​​能正確生成。通過移動它,你可以正常地調試它的成員。如果不這樣做,我不相信有任何方法可以調試該類的成員。所以要回答你的問題,不,根據我所知,沒有其他方法可以調試本地類/結構。

struct MyClass 
{ 
    MyClass(/*int & aY*/) : 
//y(aY) 
somevarname(0) 
{} 

void abc() 
{ 
    int asdf = 0; 
    asdf++; 
} 

private: 
    //int & y; 
    int somevarname; 
} ; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 


    MyClass implInst; 
    implInst.abc(); 

    return 0; 
} 
+0

感謝您的回答,但是該類對於某個原因的函數是本地的。我知道在函數範圍外定義的類可以正常工作。 – EddieBytes

+0

通常,您不需要將它們設置爲本地函數。如果你真的需要調試它,然後將它移到該函數之外。這是我知道的讓您正確調試它的唯一方法。 – steveg89

+1

謝謝,在這種情況下,定義需要是本地的功能。在abc()的作用域中定義對成員變量的引用是在調試過程中訪問這些成員的一種方法,它可以避免將定義移到_tmain的作用域之外。我只是對涉及更改代碼以進行調試的解決方案不感興趣。 – EddieBytes

相關問題