首页 > 解决方案 > 如何在 C++ 调试器中获取 stl::list 迭代器值

问题描述

如何在 C++ 调试器中查看 std::list::iterator 值?我使用 CLion 或 Xcode,但我唯一看到的是内存地址,请看截图:

在此处输入图像描述

代码示例:

#include <iostream>
#include <list>
#include <vector>
using namespace std;

int main() {
    std::list<int> l = {1, 2, 3, 4};
    auto it =  l.begin();
    std::cout << *it;
    return 0;
}

标签: c++debugging

解决方案


正如您已经看到的,调试器显示 std::list 'node' 包含指向前一个和下一个节点的指针。看起来节点结构中没有其他内容,但实际上在内存中紧随其后的是第三个指针。这指向列表元素。如果您是一个受虐狂,您可能可以在 Python 中编写一个 LLDB 合成类型提供程序来显示除 prev 和 next 之外的值。

我只是无法想象为什么隐藏列表迭代器所指的东西被认为是有用或可取的!毫无疑问,有一个非常好的理由对负责 C++ 的聪明人来说是完全有意义的。


推荐阅读