2012-11-10 88 views
11

這是我第一次嘗試創建一個Eclipse插件。我創建了一個,以及一個功能和更新站點。我將目標平臺設置爲本地Eclipse安裝。當我在開發環境中運行/調試插件時,一切正常。調試Eclipse插件

現在,我的同事從我主持的更新站點安裝了插件。當他開始使用我的插件公開的任何功能時,他會得到運行時異常。

  1. 他看到空指針異常,當我從我的開發環境運行插件項目時沒有發生這種情況。
  2. 我有一個嚮導,它是我插件的一部分。當他關閉它時,他得到一個「未處理的事件循環異常」,並且嚮導不關閉。當我在我的開發環境中運行/調試我的插件時,我沒有遇到這個問題。

現在我很困惑,爲什麼相同的插件在生產環境中的行爲不同,比如開發環境和我從IDE調試它時。兩種情況下的目標平臺都是相同的Eclipse版本。原因是什麼?

如何在生產環境中調試插件?是否有遠程調試功能來調試生產環境中的插件? 任何建議都會非常有用!

回答

17

要遠程調試您的插件,首先啓動它之前添加調試參數目標的Eclipse .ini文件

-vmargs 
-Xdebug 
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 

然後用包含插件項目的工作區打開另一個Eclipse實例。 打開運行>調試配置...,選擇遠程Java應用程序並創建一個新的配置。

作爲項目,瀏覽並選擇您的插件項目。 同時填寫您的連接屬性(目標Eclipse的主機端口 1044)。

啓動新創建的調試配置允許您以本地調試的相同方式調試插件。

+0

謝謝tkotisis。我能夠在您的幫助下進行遠程調試,並發現問題是由於我們在插件中執行了文件寫入。 FileWriter在生產環境中拋出了拒絕訪問錯誤,這在我們的開發系統中並未發生。我只能通過遠程調試才能知道這一點。再次感謝! – Anand

0

從現在的開發工作區開始,使用「Debug As - > Eclipse Application」菜單項啓動測試工作區。啓動時,您將有兩個工作區運行:原始開發工作區和新測試工作區。您可以在開發工作區的插件代碼中設置斷點,然後在測試工作區中運行插件。

當測試工作區中的插件執行到達其中一個斷點時,執行將暫停,您可以在開發工作區中使用Debug視圖查看變量,設置更多斷點或您想要執行的任何其他操作你的插件。

+0

謝謝克里斯。我瞭解常規調試的工作原理。當我按照上面提到的做時,我的插件中的所有功能都按預期工作。我建立了一個基於Maven/jenkins的CI系統,爲我創建一個更新站點。當我的同事使用這個更新站點來安裝我的插件並開始使用插件功能時,我看到了很多例外情況(我在原始問題中提到過的情況)。在我的開發環境中進行調試時,我沒有遇到這些問題。如何在生產環境中找出問題? – Anand

+1

這些異常的兩個最可能的原因是沒有內置到插件jar中的硬編碼文件路徑和資源(例如配置文件和圖標)。對於後者,請查看plugin.xml編輯器上的構建選項卡,並確保選中每個必需的文件。至於一般例外情況,您如何知道您收到例外情況?您是否在插件的Activator類中使用了可將消息寫入錯誤日誌視圖的日誌記錄支持? –

+0

感謝細節克里斯。這是代碼中的一個問題,我在遠程調試後發現了這個問題。 – Anand

2

現在我很困惑,爲什麼同樣的插件在 表現不同的生產環境,作爲對開發環境,當我 從我的IDE調試它。在這兩種情況下的目標平臺是 相同的eclipse版本。原因是什麼?

這是一個典型的例子:Eclipse插件和RCP應用程序在PDT(Eclipse IDE)和導出的產品之間確實的行爲不同。

在你的情況下,從導出的版本拋出的NullPointerException異常是9倍於圖像或其他資源文件(屬性等),由代碼加載但未在構建中列出。插件的屬性。

無論如何,您需要檢查日誌以檢索堆棧跟蹤並追查其原因。這些日誌可以在您的朋友的工作區中找到,文件號碼爲.metadata/.log

+0

感謝您的迴應Jawher。這種情況下的問題出現在代碼中,這是我在遠程調試之後想到的。 – Anand

0

查看Apache Wiki for Developing with Eclipse

在Windows 10和Tomcat運行的Windows服務,我開始:

tomcat8.5\bin\Tomcat8w.exe

&在的Java選項卡添加爲Java選項第一項啓用遠程調試:

-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n