【问题标题】:Eclipse JDT - How to watch non-public variables?Eclipse JDT - 如何查看非公共变量?
【发布时间】:2018-04-09 02:30:02
【问题描述】:

我对编程并不陌生,但我只是在学习 Java 语言和 Eclipse。我想看看 Java 如何在内部使用 Eclipse 的调试工具 (JDT Debug) 为一些不同的“标准”导入类工作。我的设置(Windows 8.1 上的 Oxygen w/JDK SE8)就单步执行代码而言工作正常,但许多导入的 Class 变量无法放入监视列表或表达式监视器中,我认为这是因为它们没有定义作为“公共”。

举个例子:我想了解 java.math.BigInteger 是如何工作的,所以我编写了一个使用 pow() 方法的快速程序。该程序成功运行,并且在使用调试模式时,我也能够很好地跟踪流程。我似乎不能做的是查看内部“默认”(无访问修饰符)变量的值。以下是 BigInteger.java 中的三个此类变量(第 2225-2231 行):

int powersOfTwo = partToSquare.getLowestSetBit();
long bitsToShift = (long)powersOfTwo * exponent;
if (bitsToShift > Integer.MAX_VALUE) {
    reportOverflow();
}

int remainingBits;

关于如何将这些变量公开给 JDT Debug 以供学习的任何建议?

【问题讨论】:

  • 您是否正在编译您的项目并使用 JDK 启动它?
  • @nitind - 是的,我想我在上面描述我的设置(JDK SE8)时说过。最初我没有使用 JDK,当我尝试单步进入 println() 时,调试器会抱怨并停止单步执行。所以我切换到 JDK 并根据一些 stackexchange 帖子安装了 src.zip 文件。除了这个问题,一切似乎都正常。
  • 您确定将启动配置更改为使用 JDK 吗?
  • @nitind - 我知道您正在尝试提供帮助,但这是我第二次不得不问您是否不清楚我在原始问题中写的内容:“ 的哪一部分我的设置(Windows 8.1 上的氧气 w/JDK SE8工作正常就单步执行代码”你不明白吗?如果我没有正确配置 JDK,那么单步执行将在第一个 Java 内部方法上崩溃,并且我将无法看到我所询问的变量的名称。对不起,如果我听起来很苛刻,但有时被问到我已经回答了什么会令人沮丧。
  • 即使在使用 JRE 启动时,您也可以单步执行您自己的代码,并且您不会在 JDK 中看到 arg0 参数。但是 Stephan 的正确之处在于,局部变量没有被编译和视为字段,并且它们仍然可以被删除或只是内联在最终的类文件中。对于您不自己编译的类,您所要求的可能根本不可能。

标签: java eclipse debugging eclipse-jdt


【解决方案1】:

我想这不是关于公共与非公共的,而是关于字段与局部变量的关系。

编译可能会丢弃有关局部变量的信息,因此调试器不再具有有关其名称的信息。在这种情况下,无法解析使用该名称的监视表达式。但是,Variables view 仍应显示该值,尽管使用了像 arg0 这样的人工名称...您仍然可以将变量与您在源代码中看到的内容相关联,因为局部变量仅在以下情况下添加到变量视图中在步进期间,您会到达相应的声明。

【讨论】:

  • 我想我明白你在说什么@Stephan,但我不确定我会在 Eclipse 中的哪里寻找这些 arg0 样式变量。你能编辑你的答案来解释一下吗?
  • 我按要求添加了链接。
  • 感谢您的澄清。很抱歉,事实并非如此。我提到的变量也没有显示在那个窗口中。确实出现了arg0(和this 变量),但它表示调用pow() 的参数,以及源代码中标记为public 的一些变量,但所有标记为private 或没有访问修改器(默认)只是没有出现。
  • 仔细观察 BigInteger.class 根本没有关于局部变量的信息。这意味着:除非您使用 rt.jar 的自定义变体运行,否则该变体是使用 -g 的适当变体编译的。
  • 很抱歉听到这个消息,我原以为核心 JDK 文件都可以通过这种方式访问​​,但我想不是。有人想知道为什么甲骨文让这一切变得如此难以访问。他们当前的标准 JDK 安装程序出于某种奇怪的原因删除了 src.zip 文件(或无法从临时文件夹中复制它),因此您必须在自动解包之后和临时文件被清除之前“抓取”它。对我来说毫无意义,但我是 Java 社区的新手,我猜想随着代码学习一些 Java 平台“政治”。叹息。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
相关资源
最近更新 更多