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

问题描述 投票:0回答:5

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

在 Eclipse 中,当我选择 Show Logical Structure 时,我会看到类似以下内容:

enter image description here

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

我知道您可以制作自定义逻辑结构,并且默认的 Map 看起来如下:

return entrySet().toArray();

有没有什么办法,通过自定义逻辑结构插件来查看地图条目比

更有用
ConcurrentHashMap$WriteThroughEntry (id=193)
java eclipse debugging eclipse-plugin
5个回答
59
投票

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

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

enter image description here

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

对于一个

HashMap<Integer,String> map;

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

enter image description here


11
投票

我做了一个丑陋的解决方法。为地图设置此详细信息格式化程序:

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

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

它可以工作,但是详细格式化程序本身有点慢,并且需要额外的步骤。此外,键未排序,因此在大映射中找到所需的键可能很困难(尽管理论上可以在格式化程序中完成排序)。


9
投票

我发现当我在调试器的“变量”窗格中选择一个值时,它的值使用 toString() 方法显示在下面。例如,这对于地图来说非常有效。


2
投票

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


0
投票

至少对于 JDK 8 及更高版本(以及当前的 Eclipse,如 2023-09),我不明白为什么除了 的第一个(强制)步骤中解释的首选项更改之外,您还需要做更多的事情,回答相关问题.

© www.soinside.com 2019 - 2024. All rights reserved.