2008-12-16 67 views
51

我從第三方庫中得到一個類的NullPointerException。現在我想調試整個事情,我需要知道這個類是從哪個對象中持有的。但在我看來,我不能在第三方的課堂中設置斷點。如何在Eclipse中的第三方庫中設置斷點?

有沒有人知道我的麻煩出路?當然,我使用Eclipse作爲我的IDE。

更新:庫是開源的。

回答

31

最安全可靠的方式來做到這一點(的東西,實際上是有用的結束)是下載源(你說這是開源的),並設置另一個「Java項目」在那個指點資源。

爲此,請將源代碼下載並解壓縮到系統的某個位置。點擊「文件」 - >「新建」 - >「Java項目」。在下一個對話框中,給它一個項目名稱並選擇「從現有源創建項目」。瀏覽到開源庫的根目錄。

假設項目中需要的所有附加庫都包含在您下載的項目中,那麼Eclipse會將所有內容都映射出來,併爲您設置構建路徑。

您需要從項目的構建路徑中刪除開源jar,並將此新項目添加到項目的構建路徑。

現在,你可以把它當作你的代碼,並隨意調試。

這得到周圍至少幾個問題與其他方法:

  1. 你可以「連接源」的jar文件,但如果jar文件中沒有調試信息編譯,這還是贏了」工作。如果jar文件是使用調試信息編譯的(lines,source,vars ...請參閱http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javac.html-g選項)。

  2. 您可以添加一個「異常斷點」來查看何時引發NullPointerException,但這是一個常見的異常,並且可能會在您正在查找的異常之前引發並處理很多(數百?)次對於。另外,如果沒有原始源代碼,您將無法真正看到拋出NullPointerException的代碼的大部分內容 - 您可以找出錯誤的可能性非常低。

58

您可以輕鬆地設置第三方庫中的方法斷點,而無需使用源代碼。只要打開課程(你會看到「我沒有來源」的視圖)。打開大綱,右鍵單擊所需的方法,然後單擊Toggle Method Breakpoint以創建方法斷點。

+2

這需要使用調試符號編譯第三方庫。 – 2011-03-03 19:11:23

+0

啊,也許不是......但我發現我不能在ServletResponse接口中放置一個方法斷點,而我可以把它放在實現類(ServletResponseWrapper)中。 – 2011-03-03 19:18:59

+1

不可用了... – kolobok 2014-09-19 14:48:46

1

通常情況下,您應該可以設置一箇中斷點。特別是如果第三方庫是開源的。但是,如果您的第三方庫來自商業供應商,他們可能已經關閉調試標誌來編譯源代碼。這將使你無法調試到它。您的供應商可能已經將此作爲混淆過程的一部分,以便無法對庫進行逆向工程,或者僅僅因爲最終編譯的類會更小。

6

您還可以設置特定例外的斷點。從Debug的角度,有一個按鈕「添加Java異常斷點」,在那裏你可以添加「NullPointerException」。只要引發這樣的異常,您的調試器就會暫停執行。

1

只是附加來源(或使用的東西,可自動將源JAR),然後設置一個斷點以正常的方式,通過雙擊感興趣的行的左側。

1

爲了使這個工作與Maven物化的Web應用程序,我不得不做三件事情。

1)用第三方jar的源代碼創建一個新的eclipse項目。

2)從pom.xml依賴關係中刪除對jar的引用。

3)將新的eclipse項目添加到項目屬性中的部署程序集。

4)將新的eclipse項目添加到項目屬性 - > Java Build Path - >引用第三方項目的現有項目的項目中。

如果第三個項目已經正確添加到你的maven倉庫中,那麼maven會自動下載適當的源代碼並讓你添加斷點而不必執行上述任何步驟;不過,我已經瞭解到,你不能總是依靠這一點。