调试时检查地图的内容

时间:2012-12-17 10:22:32

标签: c++ debugging map unordered-map

为了进行调试,我需要查看地图(std::unordered_mapstd::map)的内容,Eclipse CDT调试器没有以可读的形式提供给我,例如{1: 2, 3:4, ...}

调试时检查地图内容的最佳方法是什么?

我是否必须使用print-statements返回调试?如果是的话,简洁的宏或函数如何将任何地图的内容打印为字符串?

2 个答案:

答案 0 :(得分:1)

  

我是否必须使用print-statements返回调试?如果是的话,简洁的宏或函数如何将任何地图的内容打印为字符串?

我不知道你是否这样做 - 我不使用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。请注意,在大型代码库中,其他人可能会有相同的“明智”想法,因此您可能希望将辅助函数放在自己的命名空间中,或者为其提供更本地化的名称。选择周围的"{ "" }"以及", "分隔符之类的内容是任意的,可能不适合所有用户 - 有些人可能需要自动字符串引用/转义等等,因此将其置于全局命名空间在最好的时候是可疑的,在这种情况下它甚至可能被保留以用于未来的C ++标准或其他东西 - 毕竟,它有点喜欢将自己的名字添加到std::命名空间中。如果您愿意,请查看标准。

答案 1 :(得分:1)