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

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

在Eclipse中,当我选择Show Logical Structure时 ,我看到如下内容:

在此处输入图像描述

此视图的问题是您需要展开每个条目以查看实际的键和值。 如果你需要在超过10个元素的地图中找到某些东西,那就变得非常繁琐。

我知道你可以制作自定义逻辑结构,Map的默认值看起来像这样:

return entrySet().toArray(); 

有没有办法,通过自定义逻辑结构插件来查看更有用的地图条目

 ConcurrentHashMap$WriteThroughEntry (id=193) 

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

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

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

在此处输入图像描述

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

为一个

 HashMap map; 

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

在此处输入图像描述

好吧,我做了一个丑陋的解决方法。 为Map设置此详细格式化程序:

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

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

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

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