2012-09-18 131 views
2

我正在構建一個複雜的數學軟件,我必須在調試創建的一些500x700矩陣時看到。矩陣也沒有按順序填充,這意味着「隨機」它們被填充,我需要看到它。我已經閱讀了內存屏幕,我可以看到內存位置和它們的值,但是對於這種巨大的矩陣,內存窗口對我來說並不有用。Visual Studio 2008調試可視化矩陣

所以我的問題是,是否有任何其他方式在Visual Studio 08比內存窗口調試ADN手錶矩陣?

回答

2

我用來可視化複雜數據結構的方法是在您的類中創建一個Dump()方法,該方法將數據格式化爲字符串並返回std::string。如果要檢查變量,則在調試器中選擇它,並使用Ctrl-Alt-Q和類型myVariable.Dump()調用QuickWatch。這會顯示字符串凝聚成一行。如果你點擊放大鏡圖標,它會打開一個文本可視化窗口,可以調整大小。

如果您需要更多的控制權,格式,那麼使Dump()方法採取一個int查看詳細的您所需要的水平。

編輯:

好的,這是一個例子,使用stringstream組裝字符串:[聲明:我還沒有嘗試過編譯這個]

class Matrix { 
public: 
    int m_Data[ROWS][COLS]; 

    ... 
    std::string Dump() const { 
    std::ostringstream oss; 
    for (int r=0;r<ROWS; r++) { 
     for (int c=0;c<COLS; c++) {  
     oss << m_Data[r][c] << " "; 
     } 
     oss << "\n"; 
    } 
    return oss.str(); 
    } 

    void DumpToFile() { 
    std::ofstream os("output.txt"); 
    os << Dump(); 
    } 
}; 

轉儲()方法將輸出到您可以在QuickWatch窗口中顯示的字符串。如果文本預覽太小,則可以調用DumpToFile(),而不是將矩陣寫入可以在單獨的文本編輯器中查看的文件。關鍵是QuickWatch會評估函數調用(在一定程度上),以便您可以使用它來調用這些幫助器方法。

+0

對不起,我對C++程序設計非常新,通常在Visual Studio中更多。我想我或多或少知道你在暗示我,但我不知道如何做到這一點。要問一些小例子會不會太多?非常感謝你! –

+0

感謝您的幫助!使用這個methot知道在調試時沒有簡單的方法來讀取矩陣,這是非常有趣的。 –

+0

過去我用於矩陣的另一種技術是使用'DumpToFile()'方法,然後在Matlab/Octave/SciPy中編寫導入腳本以讀取空格分隔的文件並以圖形方式顯示。這對您的情況可能非常有用,因爲您可以查看哪些元素已填充。 –