我有一个unordered_map命名节点。它的声明如下:对LLDB中的C++对象的调用方法未能给出结果
unordered_map<T,shared_ptr<Vertex<T>>> nodes
顶点声明的类如下:
template<typename T>
struct Vertex {
Vertex(T pLabel) : label(pLabel) {};
void addEdge(T destination,int weight) {
edges[destination] = weight;
}
T label;
unordered_map<T, int> edges;
};
我有接受顶点如下unoredered_map的方法。
template<typename T>
void getMinSpanningTree(unordered_map<T,shared_ptr<Vertex<T>>>& nodes, T first, int infinityMarker) {
cout << nodes.size() << endl;
if(nodes.size() == 0) {
return;
}
...
...
当我停止LLDB执行,并键入以下内容:
(lldb) expr nodes.size()
我得到以下输出:
(lldb) expr nodes.size()
error: Couldn't lookup symbols:
__ZNKSt3__113unordered_mapINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_10shared_ptrI6VertexIS6_EEENS_4hashIS6_EENS_8equal_toIS6_EENS4_INS_4pairIKS6_SA_EEEEE4sizeEv
所以,我不知道如何使调试器正确输出答案。标准输出以下行,打印5在输出控制台:
cout << nodes.size() << endl;
这里,是我如何使用函数和类:
int main(int argc, const char * argv[]) {
shared_ptr<Vertex<string>> v1 = make_shared<Vertex<string>>("V1");
shared_ptr<Vertex<string>> v2 = make_shared<Vertex<string>>("V2");
shared_ptr<Vertex<string>> v3 = make_shared<Vertex<string>>("V3");
shared_ptr<Vertex<string>> v4 = make_shared<Vertex<string>>("V4");
shared_ptr<Vertex<string>> v5 = make_shared<Vertex<string>>("V5");
v1->addEdge("V2", 1);
v1->addEdge("V3", 3);
v2->addEdge("V1", 1);
v2->addEdge("V3", 3);
v2->addEdge("V4", 6);
v3->addEdge("V1", 3);
v3->addEdge("V2", 3);
v3->addEdge("V4", 4);
v3->addEdge("V5", 2);
v5->addEdge("V2", 3);
unordered_map<string,shared_ptr<Vertex<string>>> vertices;
vertices[v1->label] = v1;
vertices[v2->label] = v2;
vertices[v3->label] = v3;
vertices[v4->label] = v4;
vertices[v5->label] = v5;
getMinSpanningTree(vertices,v1->label,numeric_limits<int>::max());
return 0;
}
打印节点,似乎一切都倾倒:
(std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > > >) $0 = size=5 {
[0] = {
__cc = {
first = "V5"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208c68 strong=2 weak=1 {
__ptr_ = 0x0000000100208c68
}
}
__nc = {
first = "V5"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208c68 strong=2 weak=1 {
__ptr_ = 0x0000000100208c68
}
}
}
[1] = {
__cc = {
first = "V4"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208748 strong=2 weak=1 {
__ptr_ = 0x0000000100208748
}
}
__nc = {
first = "V4"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208748 strong=2 weak=1 {
__ptr_ = 0x0000000100208748
}
}
}
[2] = {
__cc = {
first = "V2"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208c08 strong=2 weak=1 {
__ptr_ = 0x0000000100208c08
}
}
__nc = {
first = "V2"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208c08 strong=2 weak=1 {
__ptr_ = 0x0000000100208c08
}
}
}
[3] = {
__cc = {
first = "V3"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x00000001002086e8 strong=2 weak=1 {
__ptr_ = 0x00000001002086e8
}
}
__nc = {
first = "V3"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x00000001002086e8 strong=2 weak=1 {
__ptr_ = 0x00000001002086e8
}
}
}
[4] = {
__cc = {
first = "V1"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208ba8 strong=2 weak=1 {
__ptr_ = 0x0000000100208ba8
}
}
__nc = {
first = "V1"
second = std::__1::shared_ptr<Vertex<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::element_type @ 0x0000000100208ba8 strong=2 weak=1 {
__ptr_ = 0x0000000100208ba8
}
}
}
}
GDB是一个伟大的调试工具,您可以轻松地查找教程或阅读文档 – chbchb55
我的平台是Mac OS X和我使用Xcode。现在默认的调试器是LLDB,它对于swift和Objective-C非常适用。我希望能够有效地调试C++。所以我不想切换到GDB,除非这是我能提高生产力的唯一方法。 – user1044328
[打印/调试libC++ STL与XCode/LLDB]可能的重复(http://stackoverflow.com/questions/39680320/printing-debugging-libc-stl-with-xcode-lldb) – jtbandes