c++ - 如何在 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;
}
解决方案
正如您已经看到的,调试器显示 std::list 'node' 包含指向前一个和下一个节点的指针。看起来节点结构中没有其他内容,但实际上在内存中紧随其后的是第三个指针。这指向列表元素。如果您是一个受虐狂,您可能可以在 Python 中编写一个 LLDB 合成类型提供程序来显示除 prev 和 next 之外的值。
我只是无法想象为什么隐藏列表迭代器所指的东西被认为是有用或可取的!毫无疑问,有一个非常好的理由对负责 C++ 的聪明人来说是完全有意义的。
推荐阅读
- reporting-services - 如果状态存在,尝试显示表达式,得到#Error
- jquery - jQuery 如果选择了下拉菜单
- c# - 如何在 Xamarin iOS 中将本地钥匙串同步到设备和 iCloud
- css - 在透明标题上使用 (-webkit-)backdrop-filter
- docker - 从谷歌应用引擎SSH执行`docker exec`时终端挂起
- firebase - Firebase 上的朋友之友
- bash - 如何在另一个变量中分配变量的值
- python - 如何根据模式(Python)中的先前正则表达式在正则表达式中执行if-else?
- powershell - 你能在powershell中指向特定的IISReset程序吗?
- python - 如何在 django 中使用条件过滤器执行聚合查询