9

デバッグのために、マップ(std::unordered_mapまたはstd::map)のコンテンツを確認する必要があります。これは、EclipseCDTデバッガーでは読み取り可能な形式では提供されません。{1: 2, 3:4, ...}

デバッグ中にマップのコンテンツを検査するための最良の方法は何ですか?

print-statementsを使用したデバッグに戻る必要がありますか?はいの場合、マップのコンテンツを文字列として出力する簡潔なマクロまたは関数はどのようになりますか?

4

2 に答える 2

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::名前空間に独自の名前を追加するのが好きなのです。気になる場合は規格を確認してください。

于 2012-12-17T10:32:18.723 に答える
1

GDBはPythonで拡張でき、きれい印刷するためのAPIがあります。

たとえばこのような、 C++用のきれいなプリンタがたくさんあります。

于 2012-12-17T10:42:51.137 に答える