我在调试我的C ++课时遇到了障碍。这是各种各样的图表,如下所示:
class Graph {
class Node {
std::map<int, Node>::iterator _neighbors[4];
};
std::map<int, Node> _map;
};
基本上,每个节点通过在包含类的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整体都是新手,所以我可能需要详细的说明。 :)
答案 0 :(得分:2)
您可以在命令窗口 - immediate 窗口中键入符号的名称,然后开始关注其成员指针。例如,如果您调试名为 v 的std :: vector并想要在位置2访问其元素,请键入
*(v._Myfirst + 2)
当然,成员_Myfirst取决于实施。但我认为你明白了。 (visual studio有一些问题resolvindo运算符的重载)
答案 1 :(得分:1)
如果您愿意,可以尝试编写自定义可视化工具,但是最终可能会复制已经存在的功能。这是一篇关于基础知识的文章:
http://www.virtualdub.org/blog/pivot/entry.php?id=120
如果您只想查看所有数组元素,可以在快速监视窗口中键入“_map [0] .second._neighbors,4”,将其视为四个数组,但这并不是最快的世界上的事情。