[英]Debugging Java in Eclipse stops without a breakpoint
我想調試包含兩個最簡單類的非常簡單的代碼。
package test.pack;
public class TestClass {
public static void main(String[] args) {
TestClassTwo tc2 = new TestClassTwo();
}
}
==================================================
package test.pack;
public class TestClassTwo {
public TestClassTwo() {
System.out.println(this);
}
}
==================================================
因此,當我在類TestClassTwo的初始化上打開斷點並通過[F11]和[F5]運行調試時,我應該進入TestClassTwo的構造函數。 但是,不是在我未設置任何斷點的地方點擊此斷點。 如圖所示
我在[適用於Java EE開發人員的Eclipse IDE]和[適用於Java開發人員的Eclipse IDE]上進行了嘗試,我也從官方Oracle網站下載並安裝了最新版本的JDK。
但是有一個限制,就是我應該根據業務方面的技術任務在我的項目中使用Java版本1.7。
我試圖使用無中斷的Eclipse命中主題中的解決方案-Eclipse ,但是它沒有幫助。
接下來,我附上屏幕快照,可以以某種方式幫助解決我的問題。
您試圖輸出此內容,這意味着對該對象進行了引用,但是嘗試從構造方法中調用該方法,從而創建了該對象。 嘗試在另一個方法的構造函數之后調用此代碼。
調試可能由於空引用異常而崩潰,這導致了調用堆棧中的錯誤,這就是程序立即崩潰的原因。
首先,到目前為止,您已進行了所有糾正。
如果您想這樣稱呼,則在單擊F5
時會出現“錯誤”。 現在,此命令稱為step into
,這意味着它將在下一個更深的堆棧層繼續執行。
從代碼中,您假定這將是TestClassTwo
的構造函數,但是在Java調用構造函數之前,它首先必須初始化類本身,而這正是圖片中的Debug View所指示的。
附帶問題:您是否多次按F5
鍵以深入了解ClassLoader.loadClass()
?
對於當前執行,您可以在Debug View中選擇倒數第二行,即
Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available
然后按F7
。 這將從相應的方法中跳出來 ,在上一個堆棧層上繼續執行,然后在該堆棧層上調用TestClassTwo
的構造函數。
為了將來的調試,您可能需要熟悉Step Filtering 。 步驟過濾器使您可以從調試中排除代碼的某些部分。 它們將被執行,但是Eclipse將自動“跳過”它們。
在相應的首選項頁面Java > Debug > Step Filtering
,eclipse方便地提供了一個選項,用於分別啟用和禁用java.lang.ClassLoader
step過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.