2009-09-03 90 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

相关问题