Eclipse调试HashMap:使用Key和Value的toString()方法的逻辑结构

时间:2011-09-01 19:32:30

标签: java eclipse debugging eclipse-plugin

我最近在使用IntelliJ几年后开始使用Eclipse。使用IntelliJ调试Map时,如果键或对象实现toString(),则会显示一个很好的键值表示字符串表示。

在Eclipse中,当我选择显示逻辑结构时,我会看到以下内容:

enter image description here

此视图的问题是您需要展开每个条目才能查看实际的键和值。如果您需要在超过10个元素的地图中找到某些内容,则会变得非常繁琐。

据我所知,您可以制作自定义逻辑结构,而Map的默认设置如下:

return entrySet().toArray();

有没有办法,通过自定义逻辑结构插件来查看比

更有用的地图条目
ConcurrentHashMap$WriteThroughEntry (id=193)

4 个答案:

答案 0 :(得分:55)

您需要在逻辑结构之上创建详细格式化程序。在您提供的示例屏幕截图中,您的逻辑结构是ConcurrentHashMap $ WriteThroughEntry。您可以通过右键单击包含ConcurrentHashMap $ WriteThroughEntry的行并选择“添加详细格式化程序”来添加详细格式化程序。

我刚刚使用HashMap敲了这个例子。

enter image description here

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

对于

HashMap<Integer,String> map;

..我很快就填满了垃圾,我现在看到了:

enter image description here

答案 1 :(得分:8)

我做了一个丑陋的解决方法。为Map:

设置此详细格式化程序
StringBuilder detail = new StringBuilder();
int i = 0;
for (Object k : keySet()) {
    detail.append((i++) + ": " + k + "\n");
}
return detail;

然后在输出中,找到所需键的条目索引,然后在逻辑结构树中找到该条目。

它有效,但细节格式化程序本身有点慢,需要额外的步骤。此外,键没有排序,因此在大型地图中找到所需的键可能很困难(理论上可以在格式化程序中进行排序)。

答案 2 :(得分:7)

我发现当我在调试器的“变量”窗格中选择一个值时,使用toString()方法显示其值。例如,这适用于地图。

答案 3 :(得分:2)

只需使用表达式窗口下的“显示逻辑结构”即可使值更具可读性。看一下这个 https://blog.codecentric.de/en/2013/04/again-10-tips-on-java-debugging-with-eclipse/