2009-09-03 86 views
2

我在調試C++類時碰壁了。這是各種各樣的圖形,這樣的事情:在Visual Studio調試模式下的「淺」顯示STL容器?

class Graph { 
    class Node { 
     std::map<int, Node>::iterator _neighbors[4]; 
    }; 
    std::map<int, Node> _map; 
}; 

基本上,每個節點通過存儲迭代器將它們包含類地圖跟蹤周圍恰好有4。

的問題是,當我去調試期間在VS2008中顯示_MAP的內容,我得到的是這樣的:

- _map 
    - [0] 
     first 
    - second 
     - _neighbors 
     - _ptr 
      first 
      - second 
      - _neighbors 
       - _ptr 
        first 
       - second 
        - _neighbors 
        ... 

顯然,而不是用索引0中列出了4個相鄰的節點在地圖上,它列出了它的第一個鄰居,然後是第一個鄰居的第一個鄰居,然後是它的第一個鄰居,等等。另外,_neighbors在任何時候都不會以數組的形式出現,即使它是這樣聲明的。

我發現了一個名爲VSEDebug的插件,它被認爲具有增強的STL顯示效果,但它是針對VS2k3的,我無法在2k8中使用它(無論是二進制還是自己編譯)。

即時窗口也沒有太大的幫助,因爲試圖呼叫_map.operator[]返回與CXX0058: Error: overloaded operator not found

任何想法如何才能獲得我的地圖內容的有意義的顯示?請注意,我對整個VS相當陌生,所以我可能需要詳細的說明。 :)

+1

可能的重複:http://stackoverflow.com/questions/104959/what-is-the-best-way-to-inspect-stl-containers-in-visual-studio-debugging – 2009-09-03 10:54:21

+0

VS 2008對我來說顯示地圖很友好地。 – sbi 2009-09-03 12:40:53

回答

2

您可以在命令窗口中立即輸入符號的名稱 - 立即窗口並開始關注其成員指針。例如,如果您調試名爲v一個std :: vector的,並希望在位置2來訪問它的元素,類型

*(v._Myfirst + 2)

當然,成員_Myfirst取決於實施。但我認爲你明白了。 (視覺工作室有一些運營商resolvindo重載的問題)

+0

'CXX0017:錯誤:符號「_Myfirst」未找到。試圖尋找類似的東西,但所有VS顯示地圖都是它包含的元素。我怎樣才能弄清楚在我的實現中調用了什麼'_Myfirst'?它保證存在嗎? – suszterpatt 2009-09-04 09:12:21

+0

數據結構中必須有一個實際指向元素的內部成員。如果您的地圖名爲* m *,請首先在命令窗口中輸入* m *。 – dudewat 2009-09-04 11:25:22

1

如果你喜歡,你可以試着編寫一個自定義的可視化器,但是你最終可能會複製已經存在的功能。下面是越過基礎的文章:

http://www.virtualdub.org/blog/pivot/entry.php?id=120

如果你只是想查看您可以在快速監視窗口中鍵入「_MAP [0] .second._neighbors,4」來查看你所有的數組元素它是四個數組,但這並不是世界上最快的事情。

+0

'_map [0]'以'CXX0058:錯誤:找不到重載操作符'返回。 dudewat關於VS和操作符的說明似乎是合適的 – suszterpatt 2009-09-04 09:09:44

+0

或者,您可以嘗試「_map.find(0).second._neighbors,4」,但這不能保證可以正常工作(特別是如果該鍵沒有元素存在)。 – 2009-09-04 13:23:16

相關問題