使用Eclipse检查Java Map:在Variables视图的Value列中显示键和值

wlsrxk51  于 2023-10-18  发布在  Eclipse
关注(0)|答案(5)|浏览(130)

在使用了几年的IntelliJ之后,我最近开始使用Eclipse。当使用IntelliJ调试Map时,如果键或对象实现了toString(),则会显示一个很好的键值字符串表示列表。
在Eclipse中,当我选择Show Logical Structure时,我会看到如下内容:

使用此视图,问题是您需要展开每个条目以查看实际的键和值。如果你需要在一个超过10个元素的Map中找到某个东西,那就变得非常乏味了。
我知道你可以自定义逻辑结构,Map的默认值是这样的:

return entrySet().toArray();

是否有任何方法,无论是通过自定义逻辑结构或一些插件,以查看值的Map条目更有用的东西,如ConcurrentHashMap$WriteThroughEntry (id=193)

b5lpy0ml

b5lpy0ml1#

您需要在逻辑结构之上创建详细信息格式化程序。在您提供的示例屏幕截图中,您的逻辑结构是ConcurrentHashMap$WriteEntry。您可以通过右键单击包含ConcurrentHashMap$WritetMap Entry的行并选择“adddetailformatter”来添加详细信息格式化程序。
我只是用HashMap拼凑了这个例子。

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

用于

HashMap<Integer,String> map;

..我很快就被垃圾填满了,我现在明白了:

rjzwgtxy

rjzwgtxy2#

我做了一个丑陋的工作。为Map设置此详细信息格式化程序:

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

然后在输出中,找到具有所需键的条目的索引,然后在逻辑结构树中找到该条目。
它可以工作,但是细节格式化程序本身有点慢,并且需要额外的步骤。而且键没有排序,所以在一个大的map中找到你想要的键可能很困难(尽管理论上可以在格式化程序中进行排序)。

kpbwa7wx

kpbwa7wx3#

我发现,当我在调试器的“Variables”窗格中选择一个值时,它的值会使用toString()方法显示在下面。例如,这对Map很有效。

xsuvu9jc

xsuvu9jc4#

只需使用表达式窗口下的Show logical structure来使值更具可读性。看这个https://blog.codecentric.de/en/2013/04/again-10-tips-on-java-debugging-with-eclipse/

2w3rbyxf

2w3rbyxf5#

至少对于JDK 8及更高版本(以及当前的Eclipse,如2023-09),我不明白为什么您需要做比that answer to a related question的第一步(强制性)中解释的首选项更改更多的事情。

相关问题