gpt4 book ai didi

java - Eclipse 调试器显示的最终字段值与源代码不同

转载 作者:行者123 更新时间:2023-11-30 04:11:44 25 4
gpt4 key购买 nike

在启动 TestNG 套件时尝试解决 OutOfMemoryError 时,我更改了 pom.xml 以使用当前可用的最新版本:TestNG 6.8.7(之前:6.8.1)

但是如果我现在尝试启动一个套件,org.testng.internal.Version.displayBanner() 仍然会打印相同的文本:

...
... TestNG 6.8.6beta_20130517_2142 by Cédric Beust (cedric@beust.com)
...

我对这段文字有两个问题:根据我的pom,它应该是6.8.7,而不是6.8.6beta_...根据Eclipse下载的源,它应该是“6.8.2beta_20130330_0839”。在我看来,当调试 org.testng.internal.Version.displayBanner 时,Eclipse 的行为很奇怪 - 我做了一个屏幕截图:Eclipse showing different text in source than in output

在我以外的其他工作站上,打印的文本有所不同,但不是预期的版本 6.8.7:“TestNG 6.8.6 by Cédric Beust”。

我在类路径中找不到 TestNG 6.8.6beta_...。

我的问题是:为什么版本的字符串在源、打印/运行时不同以及为什么两个版本不等于 6.8.7?!

编辑:抱歉,调试时未捕获屏幕截图。新的屏幕截图已链接到上面,旧的屏幕截图可以在这里找到:not at runtime: Eclipse showing different text in source than in output

最佳答案

看来还是不太明白,把版本信息放到 public static final 中并不是一个好主意。 field 。如果这样的字段具有原始类型或 String和像本例一样直接赋值,它是一个编译时常量,引用该字段的每个类都会在编译时复制它的值。因此,如果编译时的版本与运行时的版本不同,很可能会出现不一致的情况。

此外,eclipse 不一定显示类的正确源代码版本。根据库的类型,源文件与二进制类文件关联的方式不同,但 Eclipse 不会验证源文件和类文件是否兼容。

如果怀疑当前执行的类是否是正确的版本,您可以在调试器中验证类的来源。转到“表达式” View 并添加新条目 org.testng.internal.Version.class.getProtectionDomain().getCodeSource().getLocation() 。虽然很长,但幸运的是有复制和粘贴功能。这适用于所有非 JRE 的类。另一种选择是org.testng.internal.Version.class.getResource("Version.class")它甚至适用于 JRE 类,但需要对结果进行一些解释。如果调试器中当前显示的类导入了该类,则可以使用短类名。

好吧,你已经解决了这个问题,但我认为下次知道这些事情是有好处的......

关于java - Eclipse 调试器显示的最终字段值与源代码不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19447804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com