作者:Jan Kratky 來自:IBM
本文描述了可用于診斷客戶報(bào)告的 Eclipse 插件問題的策略。這些策略最強(qiáng)大之處在于能夠?qū)⒁粋€(gè)調(diào)試會(huì)話從一個(gè) Eclipse 實(shí)例附加到正在遠(yuǎn)程主機(jī)上運(yùn)行的 Eclipse 實(shí)例上。本文中所描述的策略對(duì)于基于 Eclipse 2.x 的所有產(chǎn)品都有效,如 WebSphere Studio Application Developer 和 WebSphere Studio Site Developer。
因此,您寫了一個(gè) Eclipse 插件,您將它交給了用戶 — 那個(gè)用戶甚至可能為其支付了費(fèi)用。該用戶遲早會(huì)報(bào)告問題。有時(shí)您只要根據(jù)癥狀報(bào)告就能夠斷定發(fā)生了什么事。而在其它時(shí)候,錯(cuò)誤將十分棘手,以至于您需要從用戶那里獲取更多信息,包括其系統(tǒng)配置,以及確保他實(shí)際正在運(yùn)行的插件版本是正確的。而在最壞的情況下,您甚至無法在您的環(huán)境中重現(xiàn)問題;您需要直接訪問用戶的機(jī)器以真正地了解發(fā)生了什么事。
所幸的是,只要具備少量的工作臺(tái)工具知識(shí)和訪問插件元數(shù)據(jù)的方法,您就可以診斷客戶針對(duì)插件可能報(bào)告的任何問題。在本文中,您將看到:
□ 如何獲得客戶工作臺(tái)配置方面的綜合信息,包括所安裝的插件和功能部件,還包括它們每一個(gè)的版本 □ 工作臺(tái)錯(cuò)誤作為日志記錄在哪里 □ 在哪里找到特定于特殊插件的元數(shù)據(jù) □ 如何從您自己的工作臺(tái)調(diào)試客戶的環(huán)境
工作臺(tái)配置
Eclipse 提供了一種簡(jiǎn)單的方法來抽取一個(gè)正在運(yùn)行的工作臺(tái)實(shí)例的配置細(xì)節(jié)(另請(qǐng)參閱圖 1):
1. 在工作臺(tái)的主工具欄中展開 Help 菜單。 2. 選擇 About ...(菜單項(xiàng)的文本總是以“About”開頭,但還可能包含特定于產(chǎn)品的文本,如“About IBM WebSphere Studio Application Developer”或“About IBM WebSphere Studio Site Developer” — 這都取決于您正在使用的工作臺(tái)的特點(diǎn))。 3. 在出現(xiàn)的對(duì)話框中,按 Configuration Details 按鈕。
 圖 1. About... 對(duì)話框
在當(dāng)前透視圖的編輯器區(qū)域?qū)⒋蜷_一個(gè)名為“Configuration Details”的文件。該文件含有以下信息:
□ 正在運(yùn)行工作臺(tái) JRE 的所有 Java 系統(tǒng)特性 □ 已安裝功能部件和插件及各自版本的完整列表 □ 安裝/更新管理器活動(dòng)的日志 □ 工作臺(tái)錯(cuò)誤日志的完整文本
您有時(shí)候可能會(huì)希望客戶給您發(fā)送整個(gè)日志的副本。幸運(yùn)的是,將日志保存到文件系統(tǒng)很容易:
1. 確保 Configuration Details 文件在其中打開的編輯器位于前面并且具有焦點(diǎn)。 2. 在工作臺(tái)的主工具欄中選擇 File 菜單。 3. 選擇 Save Configuration Details As... 菜單項(xiàng)。
在圖 1 中還請(qǐng)注意,在 About... 對(duì)話框中另外兩個(gè)按鈕 Feature Details 和 Plug-in Details 也可用。按其中的任意一個(gè)按鈕,會(huì)出現(xiàn)一個(gè)對(duì)話框,該對(duì)話框中含有插件/功能部件及其版本的表視圖。如果您希望迅速知道是否真的安裝了插件,或者是否安裝的插件為某個(gè)版本,那么您可能希望讓客戶先檢查一下那些對(duì)話框中的清單,而不是讓他發(fā)送其整個(gè)配置細(xì)節(jié)文件。
工作臺(tái)錯(cuò)誤日志
錯(cuò)誤日志按年月日順序(離現(xiàn)在越近的消息越靠近文件尾部)包含工作臺(tái)和插件代碼選擇記錄的任何消息和異常。工作臺(tái)自動(dòng)將所有未捕獲的異常記錄到錯(cuò)誤日志中。
錯(cuò)誤日志的文本包含在我們于前一節(jié)中生成的 Configuration Details 文件中。Eclipse 還從 Error Log 視圖提供了錯(cuò)誤日志的圖形視圖,Error Log 視圖可以在 PDE Runtime 視圖類別下找到。(要打開視圖,請(qǐng)選擇 Window > Show View)。錯(cuò)誤日志條目在表中以行的形式出現(xiàn);最近的條目顯示為第一行。您可以這樣來查看某個(gè)條目的詳細(xì)信息:選擇一行,單擊鼠標(biāo)右鍵,然后選擇 Properties。在出現(xiàn)的特性對(duì)話框中,特定日志條目的詳細(xì)信息位于 Status Details 頁(yè)上。另請(qǐng)參閱圖 2。
 圖 2. Error Log 視圖
錯(cuò)誤日志文件本身作為 .metadata/.log(相對(duì)于工作空間 root)駐留在文件系統(tǒng)上。工作空間 root 常常直接位于工作臺(tái)安裝目錄中,作為名為 workspace 的文件夾(這是 Eclipse 缺省工作空間位置)。然而,用戶可以將其工作空間 root 配置為文件系統(tǒng)中的任何文件夾。
插件注冊(cè)表
Configuration Details 文件列出了安裝在工作臺(tái)實(shí)例中的功能部件和插件。然而,該文件并不指示各個(gè)插件是否是活動(dòng)的。
插件是惰性裝入的 — 即其代碼只有在需要的時(shí)候才裝入內(nèi)存。這樣,就會(huì)出現(xiàn)這樣一種情形,插件已經(jīng)安裝了,但因?yàn)槟承┰?,它卻沒有被激活。這表明:要么是在工作臺(tái)試圖裝入該插件時(shí)發(fā)生了錯(cuò)誤,要么只是還沒有訪問插件的功能。
Plug-In Registry 視圖列出了已安裝的插件,并指示每個(gè)插件是否是活動(dòng)的。要打開該視圖,請(qǐng)轉(zhuǎn)向 Window > Show View??梢栽?PDE Runtime 類別下找到該視圖。
插件是根據(jù)名稱排序的(顯示的是名稱而不是插件標(biāo)識(shí))。如果插件圖標(biāo)的上面放有一個(gè)“runner”圖標(biāo),那么該插件是活動(dòng)的。
 圖 3. Plug-in Registry 視圖
圖 3 顯示了一個(gè)樣本工作臺(tái)安裝的 Plug-in Registry 視圖。請(qǐng)注意,并非所有顯示的插件都是活動(dòng)的,只有那個(gè)名為“Apache Axis”的插件才是活動(dòng)的,其圖標(biāo)包含“running”修飾。
在激活(或者取消激活)插件時(shí),插件注冊(cè)表視圖并不自動(dòng)更新。要檢取插件的當(dāng)前啟用/禁用狀態(tài),請(qǐng)按視圖標(biāo)題欄中的 Refresh 按鈕。否則,視圖所反映的仍將是視圖首次顯示時(shí)所存在的事務(wù)狀態(tài)。
插件元數(shù)據(jù)
插件通常會(huì)維護(hù)特定于自己的元數(shù)據(jù)。該元數(shù)據(jù)可以采取任何形式:特性文件、XML 文件甚至特有的二進(jìn)制格式。當(dāng)元數(shù)據(jù)采用人們可以讀懂的格式時(shí),這對(duì)直接查看元數(shù)據(jù)文件會(huì)很有用。
插件元數(shù)據(jù)駐留在文件系統(tǒng)的 .metadata/.plugins 目錄(相對(duì)于工作空間 root)下。.plugins 目錄內(nèi)有一些文件夾,它們各自對(duì)應(yīng)一個(gè)插件,以便維護(hù)它們自己的元數(shù)據(jù)。每個(gè)文件夾的名稱都與對(duì)應(yīng)插件的標(biāo)識(shí)相同。該插件的元數(shù)據(jù)應(yīng)該能夠在文件夾中找到。
插件創(chuàng)建者也可能已經(jīng)選擇了使用插件的缺省 preferences.ini 文件,該文件位于插件的 install 文件夾中。該 install 文件夾將包含插件的標(biāo)識(shí),并且將位于 plugins 目錄中,安裝就是在該目錄中進(jìn)行的(該目錄通??梢灾苯釉诠ぷ髋_(tái)安裝 root 下找到,但請(qǐng)記住,插件安裝位置是可配置的)。
請(qǐng)注意,讓插件在我們剛才描述的位置維護(hù)其元數(shù)據(jù)被認(rèn)為是工作臺(tái)最佳做法。不過,您應(yīng)該警惕這種可能性,即插件創(chuàng)建者可能選擇不遵循這一約定,而將元數(shù)據(jù)存儲(chǔ)在其它一些位置,如系統(tǒng) temp 目錄。
調(diào)試遠(yuǎn)程工作臺(tái)
用于維修 Eclipse 插件代碼的功能最強(qiáng)大的工具是 Eclipse 調(diào)試器調(diào)試客戶工作臺(tái)的能力,即便客戶的工作臺(tái)運(yùn)行于遠(yuǎn)程機(jī)器上也不例外。任何運(yùn)行工作臺(tái)實(shí)例的機(jī)器,只要能夠通過網(wǎng)絡(luò)進(jìn)行訪問,您都可以使用 Eclipse 安裝的 Debug 透視圖來調(diào)試實(shí)例上所出現(xiàn)的問題。遠(yuǎn)程工作臺(tái)借助開放的套接字來公開其調(diào)試信息(清單 1 顯示了打開調(diào)試套接字所需指定的 Eclipse 啟動(dòng)參數(shù))。在將調(diào)試器連接到客戶的工作臺(tái)之后,您就可以利用 Eclipse 調(diào)試器的全部功能,如設(shè)置斷點(diǎn)、檢查變量和執(zhí)行堆棧等等。(有關(guān)使用 Eclipse Java 調(diào)試器的詳盡信息可以在工作臺(tái)幫助中獲得,工作臺(tái)幫助可以通過工作臺(tái)的 Help > Help Contents 菜單項(xiàng)來訪問。)
重要:工作臺(tái)工作空間中的源代碼必須與用來構(gòu)建(客戶安裝的)插件版本的代碼相匹配。在繼續(xù)之前,需要確定客戶所安裝的代碼的級(jí)別,并確保您工作空間中的代碼與之匹配。
在確信源代碼處于正確的級(jí)別之后,客戶必須使用下列參數(shù)(顯示在清單 1 中)來啟動(dòng)其工作臺(tái)實(shí)例,以啟用到遠(yuǎn)程調(diào)試器的連接。
清單 1. 啟動(dòng)可遠(yuǎn)程調(diào)試的工作臺(tái)
eclipse.exe -vmargs -Xdebug -Xnoagent \ -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
請(qǐng)注意賦給 address 的值,它是一個(gè)端口號(hào),遠(yuǎn)程調(diào)試器將開放該端口供連接使用。在上面的示例參數(shù)中,端口號(hào)是 8000。要明白,客戶可能位于防火墻的后面,他可能必須對(duì)防火墻進(jìn)行配置,以便您能夠建立套接字連接。
指定 server=y 將表明您剛剛啟動(dòng)的 VM 將等待進(jìn)入的套接字連接。通過指定 suspend=n,您允許 Java 類的執(zhí)行繼續(xù)進(jìn)行。通過指定 suspend=y(或者完全忽略 suspend 指定,因?yàn)?y 是其缺省值),您將告知?jiǎng)倓倖?dòng)的 VM:在裝入主類之前,您希望它立即暫停。
現(xiàn)在,必須從您的工作臺(tái)將調(diào)試器連接到客戶的會(huì)話:
1. 切換到 Debug 透視圖(Window > Open Perspective)。 2. 從主工作臺(tái)菜單選擇 Run > Debug...。(或者,從(工作臺(tái)工具欄中的)Debug 按鈕上的下拉菜單選擇 Debug...)。 3. 在啟動(dòng)配置對(duì)話框的左側(cè)視圖中選擇 Remote Java Application 項(xiàng)。 4. 單擊 New 按鈕。隨后會(huì)創(chuàng)建一個(gè)新的遠(yuǎn)程啟動(dòng)配置,并會(huì)顯示三個(gè)選項(xiàng)卡:Connect、Source 和 Common。 5. 在 Connect 選項(xiàng)卡的 Project 域中,輸入或者通過瀏覽選擇要使用的項(xiàng)目作為啟動(dòng)的參考(用于源碼查找)。對(duì)于遠(yuǎn)程工作臺(tái)調(diào)試,您無須指定項(xiàng)目。 6. 在 Connect 選項(xiàng)卡的 Host 域中輸入正在運(yùn)行 Java 程序的主機(jī)的 IP 地址或域名。如果程序與工作臺(tái)運(yùn)行于同一臺(tái)機(jī)器上,那么請(qǐng)輸入 localhost。 7. 在 Connect 選項(xiàng)卡的 Port 域中輸入端口,遠(yuǎn)程 VM 在該端口上接受連接。在我們的示例中,這個(gè)值為 8000,它匹配使用清單 1 中的參數(shù)啟動(dòng)遠(yuǎn)程工作臺(tái)時(shí)所指定的端口。 8. Allow termination of remote VM 標(biāo)志是一個(gè)開關(guān),它確定調(diào)試器中是否支持 Terminate 命令。如果您希望能夠終止目前所連接的 VM,那么請(qǐng)選擇此選項(xiàng);您一般不需要這么做。 9. 單擊 Debug。啟動(dòng)試圖通過指定的地址和端口連接到 VM,結(jié)果顯示在 Debug 視圖中。如果啟動(dòng)程序無法通過指定的地址連接到 VM,那么會(huì)出現(xiàn)一條錯(cuò)誤消息。
 圖 4. 啟動(dòng)連接到遠(yuǎn)程工作臺(tái)的調(diào)試會(huì)話
現(xiàn)在,您已連接到客戶的工作臺(tái)了。可以要求用戶在其工作臺(tái)中執(zhí)行任何您希望的操作,而其工作臺(tái)狀態(tài)將反映在調(diào)試會(huì)話中。
在以這種方式進(jìn)行調(diào)試的時(shí)候,您可能希望使用遠(yuǎn)程控制工具(如由 WinVNC 或 Lotus Sametime 提供的工具)來直接控制客戶的桌面,以便您能夠自己在客戶工作臺(tái)上啟動(dòng)操作。
如果檢索到正確級(jí)別的代碼,那么您將能夠使用這一技術(shù)來代替跟蹤機(jī)制。Eclipse 提供了一個(gè)優(yōu)秀的跟蹤框架(請(qǐng)參閱參考資料以獲取鏈接),但象所有跟蹤機(jī)制一樣,這種跟蹤框架要求將其代碼插入插件源代碼中來產(chǎn)生跟蹤語(yǔ)句。那些代碼會(huì)有一些性能損失,即便關(guān)閉了跟蹤也是如此,而且它們肯定會(huì)增加代碼資源占用量。而且,您要受開發(fā)人員的制約 — 如果在您需要插入跟蹤語(yǔ)句的某個(gè)地方?jīng)]有插入跟蹤語(yǔ)句,那么跟蹤對(duì)您將毫無幫助。然而,有了遠(yuǎn)程調(diào)試技術(shù),您就不必為之擔(dān)憂了 — 您擁有完全源代碼級(jí)調(diào)試的能力。
建議的客戶服務(wù)過程
在本文中,您看到了一組用于診斷 Eclipse 插件客戶問題的工具?,F(xiàn)在,如何以最適合于您及您的開發(fā)小組的方式使用這些工具就由您決定了。對(duì)客戶服務(wù)過程的一個(gè)建議是:
1. 如果您無法光憑錯(cuò)誤報(bào)告來重現(xiàn)問題,那么就叫客戶把他的配置文件副本發(fā)一份給您。用它來確保您的插件版本與用戶的插件版本相同。您還需要仔細(xì)檢查錯(cuò)誤日志以了解“泄密”消息和堆棧跟蹤。 2. 如果問題看起來是個(gè)插件激活問題,那么您可能要讓用戶檢查其插件注冊(cè)表視圖來替您一查究竟。 3. 如果似乎是插件元數(shù)據(jù)處理方面出了錯(cuò)誤,或者問題特定于用戶安裝插件的方式,那么就叫用戶把您認(rèn)為可能有嫌疑的特定于插件的元數(shù)據(jù)文件副本發(fā)給您。 4. 如果這些都不奏效,那么請(qǐng)將匹配級(jí)別的源代碼裝入您的工作空間,然后遠(yuǎn)程調(diào)試客戶的工作臺(tái)。 當(dāng)然,要找到客戶問題的癥結(jié)所在,您必須保持靈活,具體問題具體分析。
結(jié)束語(yǔ)
基于 Eclipse 的工作臺(tái)為綜合可服務(wù)性提供了從查看詳細(xì)配置信息到對(duì)客戶安裝進(jìn)行實(shí)際代碼級(jí)別調(diào)試的廣泛功能。
|