【问题标题】:Eclipse: Debugging & inspection of variables causes com.sun.jdi.ObjectCollectedExceptionEclipse:调试和检查变量会导致 com.sun.jdi.ObjectCollectedException
【发布时间】:2018-02-27 08:49:20
【问题描述】:

我调试我的程序并在这里和那里添加一个断点。停下来后,我想检查一些变量,有时会得到com.sun.jdi.ObjectCollectedException。在搜索不同的来源后,我发现该对象很可能是 Garbage Collected。点击这里和那里我可以检索我的对象,但在 Variables 视图中我无法检查变量。

-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

我正在使用 OpenJDK 1.8.0_151 在 Linux/OpenSuSe 下运行。任何提示如何避免这种 GC 问题?这是 IDE 中的某种设置吗?

【问题讨论】:

  • 如果对象被垃圾回收,你在错误的地方检查它,对象在断点之前是活动的。
  • 是的,但是在保持编辑器打开一段时间后,无法进一步检查该对象。因此我假设它的 GCed

标签: java eclipse debugging


【解决方案1】:

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

【讨论】:

  • 对我有用,但我不明白为什么?
  • 注意:你右键的变量必须是集合而不是Object。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    此错误已在 Eclipse 4.18 中修复

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

    具有活动 GC 的变量视图中的稳定逻辑结构

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

    【讨论】:

      【解决方案4】:

      您可以添加逻辑结构格式化程序,而不是关闭逻辑结构,如此答案中所述:Eclipse debug mode view instance variable values。这可以防止异常并让您以有用的方式查看变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 2019-06-27
        • 2012-04-22
        • 2011-12-03
        • 2021-02-25
        • 1970-01-01
        相关资源
        最近更新 更多