Eclipse:调试和变量检查引起com.sun.jdi.ObjectCollectedException异常

25

我调试程序并在各处添加断点。停止后,我想检查一些变量,并有时会得到一个com.sun.jdi.ObjectCollectedException。在查阅不同的来源后,我发现最可能的原因是对象被垃圾回收了。点击这里和那里,我可以恢复我的对象,但在变量视图中,我无法检查该变量。

-vmargs
-Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=1.8
-Xms512m
-Xmx4096m
--add-modules=ALL-SYSTEM

我正在Linux/OpenSuSe下运行,使用OpenJDK 1.8.0_151。有什么提示可以避免这种GC问题吗? 这是IDE中的某种设置吗?

我在Linux/OpenSuSe上使用OpenJDK 1.8.0_151运行程序,如何避免GC问题?这与IDE设置有关吗?


如果您在垃圾回收之后检查对象,则您正在错误的位置进行检查,因为在那个断点之前该对象是活动的。 - LMC
2
是的,但是在编辑器打开一段时间后,对象就无法进一步检查了。因此我认为它已经被垃圾回收了。 - LeO
尝试使用此修复方法:https://dev59.com/S3VC5IYBdhLWcg3wbglT#49003027 - Jeremy Bunn
4个回答

25

右键点击变量,然后点击“显示逻辑结构”,取消选中任何集合。


5
可以,但我不明白为什么? - M46
注意:您右键单击的变量必须是一个集合而不是一个对象。 - javaPlease42

13

当您的代码在断点处停止执行时:

  1. 变量窗格中右键单击变量
  2. 单击集合(如下图中的数组)将取消选中
  3. 现在您可以检查该变量

输入图像描述


2

这个bug已经在Eclipse 4.18中得到修复。

https://www.eclipse.org/eclipse/news/4.18/jdt.php

在启用GC时,稳定了变量视图中的逻辑结构

当应用程序的垃圾收集器处于活动状态时,调试视图不再中断显示逻辑结构(com.sun.jdi.ObjectCollectedException在检索值时发生)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接