2012-01-08 63 views
3

有沒有辦法在eclipse應用程序中捕獲異常?在Eclipse/Java應用程序中被捕獲的異常通知

我知道,如果我使用eclipse調試器啓動應用程序,我可以暫停執行捕獲和未捕獲的異常(請參閱https://stackoverflow.com/a/3066280/228965)。我想這個功能以某種方式使用JVMTI。

現在我有以下問題:

我有一個Eclipse應用程序不是我寫的。我想監視這個應用程序。我編寫了一些軟件包來監視應用程序的不同方面(用戶交互,工作臺變更等)。我使用bundles.info文件在應用程序中啓動這些軟件包。現在我需要在發生異常時收到通知。我向錯誤日誌添加了一個偵聽器,並以這種方式通知未捕獲的異常。但是,我也希望能夠得到「任何」異常的通知,即使那些被原始開發人員抓住的異常也是如此。

有沒有辦法做到這一點?

+0

會在Eclipse的調試器工作中運行該應用程序,還是需要一種方法來自動記錄程序中的所有異常? – 2012-01-08 20:23:15

+2

使用AOP查找所有拋出並添加一個'之前'建議的日誌。不是特定於Eclipse的。 – 2012-01-08 20:27:26

+0

我沒有程序的源代碼。這是一個日食應用程序。我在OSGi運行時啓動我的bundle,並希望在不同的事件中得到通知,例如引發異常。 – zardosht 2012-01-18 10:36:56

回答

0

給構造函數java.lang.Exception添加一個斷點(或者甚至可以是Throwable,具體取決於您要查找的內容)。

所有異常,即使是自定義異常,都必須從其中一個異常擴展而來,因此您可以在創建每個異常時查找它們,然後甚至可以通過追蹤它來查看它被捕獲和處理的位置(如果有的話) 。

使用AOP也可能是一個不錯的選擇,但這種方法不需要對現有代碼進行任何修改 - 源代碼或字節代碼。

+0

我沒有在eclipse或調試模式下運行程序。我已經給了一個eclipse應用程序,並且在該應用程序的OSGi運行時啓動我自己的包。沒有調試和斷點。 – zardosht 2012-01-10 15:29:03

+0

有沒有可能在調試模式下運行它? (你不需要Eclipse。)如果你不能這樣做,那麼你很想修改代碼 - 在這種情況下,我會建議AOP方法。 – ziesemer 2012-01-10 23:07:29

0

您可以調查應用程序的記錄器。如果它使用log4j,你可以創建一個特殊的appender來處理異常,並使用它們。

-1

從JDK 1.5開始,您可以使用Thread.setDefaultUncaughtExceptionHandler()來達到此目的。

+0

來自這個問題:'但是我也希望能夠得到「任何」例外的通知,即使那些被原始開發者抓住的例外。您的解決方案僅處理未捕獲的異常。 – 2012-01-08 23:49:36

相關問題