调试时检查映射的内容
Inspecting the content of a map while debugging
为了调试,我需要查看映射(std::unordered_map
或std::map
)的内容,Eclipse CDT调试器没有以可读的形式提供给我,例如{1: 2, 3:4, ...}
调试时检查映射内容的最佳方法是什么?
我是否必须重新使用打印语句进行调试?如果是,一个简洁的宏或函数会如何将任何映射的内容打印为字符串?
我必须回到打印语句的调试吗?如果是,一个简洁的宏或函数会如何将任何映射的内容打印为字符串?
我不知道你是否使用Eclipse,但打印地图很容易:
template <typename K, typename V>
std::ostream& operator<<(std::ostream& os, const std::map<K, V>& m)
{
os << "{ ";
for (typename std::map<K, V>::const_iterator i = m.begin(); i != m.end(); ++i)
{
if (i != m.begin()) os << ", ";
os << i->first << ": " << i->second;
}
return os << " }";
}
然后你就可以使用<< my_map
了。不过,请注意,在大型代码库中,其他人可能也有同样的"聪明"想法,因此您可能希望将helper函数放在自己的命名空间中,或者为其命名一个更本地化的名称。周围的"{ "
、" }"
和", "
分隔符的选择是任意的,可能不适合所有用户-有些用户可能想要自动字符串引用/转义等,所以在最好的情况下,将其放在全局命名空间中是可疑的,在这种情况下,它甚至可能被保留为可能包含在未来的C++标准或其他标准中-毕竟,它有点喜欢将自己的名字添加到std::
命名空间中。如果您愿意,请查看标准。
GDB可以用Python扩展,并且有一个用于漂亮打印的API。
有很多漂亮的C++打印机可用,比如这个。
相关文章:
- 如何检查映射值中是否存在元素
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- 标准::键映射和/或 boost::any 类型的值的类型检查
- 有效地检查映射 c++ 中是否存在元素
- C 如何在编译时检查变体映射的类型
- 检查是否存在多维映射的元素的最快方法是什么
- 调试时检查映射的内容
- 检查C++中的映射是否包含其他映射中的所有键
- 如何在c++中检查指向映射的指针是否为null
- 映射/集合迭代器不兼容-检查对象是否在映射中
- 映射/集合迭代器不兼容-检查映射中是否存在键
- std::使用compare参数映射检查第一个和第二个值
- 检查字符串是否属于具有字符串向量作为值的映射的值
- 检查元素是否存在于映射中的映射中
- 检查 C++ 中的空静态映射变量
- 如何检查元素是否在C++的映射键中
- 检查是否在映射 C++ 中找到并获取密钥
- C++-对映射-检查是否存在具有给定第一坐标的对
- 为什么在键检查映射::template之前调用对象的构造函数
- 使用映射检查id是否存在