簡體   English   中英

Eclipse Debugger為最終字段顯示的值與源代碼顯示的值不同

[英]Eclipse Debugger shows a different value for a final field than the source code does

在嘗試啟動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在源代碼中顯示的文本與在輸出中顯示的文本不同

在不是我的其他工作站上,打印的文本不同,但不是預期的版本6.8.7:“CédricBeust的TestNG 6.8.6”。

我在類路徑中找不到TestNG 6.8.6beta_...。

我的問題是:為什么版本的String在源代碼,運行時/打印過程中有所不同?為什么兩個版本都不等於6.8.7?

編輯:對不起,截圖沒有及時進行調試。 新的屏幕快照鏈接在上面,舊的可以在此處找到: 不在運行時:Eclipse在源代碼中顯示的文本與在輸出中顯示的文本不同

似乎仍未很好地理解,將版本信息放入public static final字段中不是一個好主意。 如果這樣的字段具有原始類型或String並像本示例一樣直接分配,則它是一個編譯時常量,並且引用該字段的每個類都將在編譯時復制其值。 因此,如果編譯時的版本與運行時的版本不同,則很可能會出現不一致的情況。

此外,eclipse不一定顯示正確的類的源代碼版本。 根據庫的類型,有不同的方式將源文件與二進制類文件相關聯,但是Eclipse不會驗證源文件和類文件是否兼容。

如果不確定當前執行的類是否是正確的版本,則可以在調試器中驗證該類的源。 轉到“表達式”視圖,並添加一個新條目org.testng.internal.Version.class.getProtectionDomain().getCodeSource().getLocation() 那很長,但是值得慶幸的是有復制和粘貼。 這適用於不是JRE的所有類。 替代方法是org.testng.internal.Version.class.getResource("Version.class") ,該方法甚至適用於JRE類,但需要對結果進行某種解釋。 如果調試器中當前顯示的類導入了該類,則可以使用簡短的類名。

好了,您已經解決了問題,但是我認為下次知道這些事情是不錯的……

我自己發現了問題的一部分。 我更新了Eclipse的TestNG插件,現在已打印TestNG 6.8.6。 似乎pom.xml中使用的版本與Eclipse執行無關-可能已經知道這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM