close

Remote Debug(遠端除錯)

這是筆者在工作上學到的(有人教的)一個佷好用的Debug方式;它的運作原理跟IDE在進行Debug是一樣的,不過IDE是幫我們把伺服器與IDE的Debug綁在一個按鍵上,而我們這次要將它們拆開為IDE與伺服器,並進行Dubug。

下方我們要示範的IDE為Eclipse(程式為JAVA),伺服器為Tomcat,而環境如下:

IDE中的Web Debug原理

在開始動手之前,我們要先瞭解一下IDE中,是如何辦到Web的Debug。其實原理很簡單,首先我們必須在IDE指定要啟動的伺服器,原因是伺服器必須開啟一個Debug Port,所以IDE必須知道我們啟動的是那一種伺服器;指定好伺服器後,IDE在幫我們啟動伺服器的同時,也會同時請伺服器開啟一個Debug Port(利用設定的方式,讓伺服器啟動時開啟),等伺服器啟動完成後,IDE再利用這個Port,連到伺服器並與Code做連結,就變成我們常看到的Debug模式了。

瞭解原理後,就可以知道我們必須經過這些手續才能完成Debug模式:

  1. 伺服器啟動的同時必須開啟Debug Port。

  2. IDE必須經過這個Port與伺服器連結。

下面我們就來實作這二個步驟。

Tomcat開啟Debug Port

通常我們在啟動Tomcat時,預設是不會開啟Debug Port的,所以必需額外進行設定才能開啟。

我們進入到tomcat中的bin資料夾,找到catalina.sh進行編輯,在最上方加入該行設定:

export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

如下圖:

第一行是設定tomcat的JVM,第二行是請tomcat在啟動時,將Debug Port開啟為8000(可自行修改),儲存設定後,再利用一般的tomcat啟動方式,正常啟動tomcat即可。

*請注意防火牆是否有開啟8000 Port,否則可先暫時關閉防火牆,直到我們確認設定沒有問題。

IDE連結到伺服器的Debug Port

當我們確認tomcat正常啟動後,回到我們的IDE,在這個例子是則是Eclipse;我們在Eclipse中選擇Debug configurations…,如下圖:

接著在左邊的清單中找到「Remote JAVA Application」後,按右鍵,新增一個。

 

按「Browse」選擇要進行Debug的專案,並設定好伺服器的Debug Port,如下圖。

最後我們按下Debug的按鍵後,Eclips即開始幫我們進行與伺服器的連結了;進行連結的時間會稍微久一點,需要一點耐心,連結成功後,我們可以切換到Eclipse的Debug視窗中,看到類似的資訊。

下圖是連結中的圖示:

連結成功的圖示:

看到上方的圖,就代表Remote Debug的連結已經成功了,這時就可以進行遠端的Debug了;此時只要下中斷點,並針對Tomcat進行操作,Eclipse即會停在你下中斷點的位置了。

其他注意事項

在Remote Debug中最常遇見的問題,就是IDE與伺服器的連結問題。為了把問題簡單化,建議在tomcat啟動後,可以試著用telnet的指令,來指定IP與port號,例如本例:telnet 192.166.1.1 8000,執行後就如果是成功的情況:

可以看到一片空白,剩下一個遊標在閃礫;如果是失敗的情況,可以看到下方的畫面:

這樣就比較有材料可以判斷到底是那邊有問題,且為了問題簡單化,一開始建議先將防火牆關閉,等到真的成功連線後再來調整防火牆設定。

另外常就是真的停在Debug的況下,常常會發現無法取得相關的變數,如下圖:

這是因為「Debug視窗」的焦點被移掉了,此時必須手動將「Debug視窗」的焦點調回來,請先點下圖的紅框處:

之後再移到相應的變數,即可取得程式目前的變數值。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()