web-dev-qa-db-ja.com

EclipseデバッグHashMap:キーと値のtoString()メソッドを使用した論理構造

IntelliJを数年間使用した後、最近Eclipseを使い始めました。 IntelliJを使用してMapをデバッグするときに、キーまたはオブジェクトがtoString()を実装している場合、キー値の文字列表現の適切なリストが表示されます。

Eclipseで論理構造を表示を選択すると、次のように表示されます。

enter image description here

このビューの問題は、実際のキーと値を表示するために各エントリを展開する必要があることです。10を超える要素のマップで何かを見つける必要がある場合、非常に面倒になります。

カスタム論理構造とマップのデフォルトを次のように表示できることを理解しています。

return entrySet().toArray();

カスタム論理構造またはプラグインのいずれかを使用して、マップエントリを表示する方法はありますか?

ConcurrentHashMap$WriteThroughEntry (id=193)
20
ltfishie

デバッガーの「変数」ペインで値を選択すると、toString()メソッドを使用してその値が以下に表示されることがわかりました。これは、たとえばマップでうまく機能します。

9
Mike Sokolov

論理構造の上に詳細フォーマッタを作成する必要があります。提供したスクリーンショットの例では、論理構造はConcurrentHashMap $ WriteThroughEntryです。 ConcurrentHashMap $ WriteThroughEntryを含む行を右クリックし、[詳細フォーマッターの追加]を選択すると、詳細フォーマッターを追加できます。

HashMapを使用してこの例をノックアップしました。

enter image description here

Java.util.HashMap$Entry //  key + " - " + value

のために

HashMap<Integer,String> map;

..私はすぐにゴミを詰め込みました、私は今見ます:

enter image description here

56
horbags

さて、私は醜い回避策を作りました。マップ用にこの詳細フォーマッタを設定します。

StringBuilder detail = new StringBuilder();
int i = 0;
for (Object k : keySet()) {
    detail.append((i++) + ": " + k + "\n");
}
return detail;

次に、その出力で、必要なキーを持つエントリのインデックスを見つけ、論理構造ツリーでそのエントリを見つけます。

動作しますが、ディテールフォーマッタ自体は少し遅く、追加の手順が必要です。また、キーはソートされていないため、大きなマップで必要なキーを見つけるのは難しい場合があります(ただし、理論的にはフォーマッターでソートを行うことができます)。

10

値を読みやすくするには、[式]ウィンドウの下にある[論理構造を表示]を使用するだけです。これをチェックしてください https://blog.codecentric.de/en/2013/04/again-10-tips-on-Java-debugging-with-Eclipse/

3
spartan