使用Eclipse進行遠端偵錯
來源:互聯網
上載者:User
今天決定做件有意義的事,寫篇圖文並茂的blog,為什麼要圖文並茂?因為很多事可能用語言也說不明白,從以前我發表的一篇文章可以看得出來,http://blog.csdn.net/sunyujia/archive/2008/03/23/2211109.aspx 我的朋友們普通反應看完後覺得不知所云,可能是我寫的太簡單,下面步入正題。 什麼是遠端偵錯,就是在A機器上利用Eclipse單步跟蹤調試B機器上的Web應用,當然調試A機器上Web應用也是沒有問題的,90%我都是調試原生Web應用,遠端偵錯的意義我想我不用說了,大家都會想到它的好處,你可以在本地調試非本地測試環境上的應用,這是件多麼美妙的事,所以我就不說它的好處了,那麼本地調試呢,我喜歡本地調試也採用下面要介紹的方法,為什麼不用myeclipse,WTP,TomcatPlugin等。 下面我闡述下在eclipse中啟動Web應用的缺陷:我本身是非常喜歡使用Myeclipse 做WEB部署的,但是我不喜歡使用Myeclipse啟動tomcat,當然WTP,TomcatPlugin等也不喜歡,使用Myeclipse做部署的好處就是非常靈活,不僅可以部署到Web應用裡面還可以任意部署到某一指定路徑下。但是使用Myeclipse啟動tomcat的話,有如下問題: a.卡,比較慢,尤其是同時啟動多個應用. b.如果斷點比較多的時候例如100多個,必須把每個不需要使用的斷點先禁用掉或乾脆刪掉,也就是說web應用啟動的時候就已經決定了是debug模式還是run模式。中間不可以切換。c.一旦eclipse死掉了,web應用也就斷掉了。d.對於程式來說相對路徑,類載入路徑都是和系統正式啟動並執行情況下完全不同的(要視具體外掛程式而論,每個外掛程式的部署方式都不太一樣),即和Web應用獨立啟動並執行相對路徑和類載入環境有差異,當然熟練的老手可以輕鬆搞定,但是就目前國內情況看,很多初學者在這個問題上還是很苦惱的。e.順便說一句和本話題無關的,eclipse的console並不能完全類比cmd控制台,一些流操作會有問題。例如:PushbackInputStream那麼使用遠端偵錯的方法做本地調試有什麼好處呢?a. 運行速度比較好。 b. 運行期間可以使用eclipse串連web應用做調試,調試完成後可以中斷連線,需要調試的時候可以再重新進行串連,斷點的禁用功能可能就很少派上用場了,因為相對於在debug模式和run模式間自由切換。c. Web應用是獨立啟動並執行,不用擔心eclipse死掉即玩完了。d. 從開發到上線運行,環境一直可以保持一致。說了半天,沒有使用過的人可能還是不瞭解,沒關係,可以看完下面的,再回過頭看上面的。下面我舉一個小例子介紹如何進行遠端偵錯.環境:tomcat,Eclipse,做遠端偵錯不需要任何外掛程式。當然可以使用MyEclipse把Web應用部署到tomcat上面,注意只是部署,一般來講使用遠端偵錯就不需要配置MyEclipse的Web Server了,MyEclipse在這裡只起到一個copy檔案的作用,好在現在Myeclipse可以隨意指定目錄copy了。即 Deployment 對話方塊中的Custom Location,在這裡推薦大家一個copy檔案的小外掛程式,有了這個外掛程式就不需要Myeclipse部署了。FileSync plugin for Eclipse http://andrei.gmxhome.de/filesync/index.html 這個外掛程式的作者還寫了很多其他好用的外掛程式,大家可以順便看下。 這次例子的源碼很簡單:Jsp 源碼如下index.jsp<%com.syj.test.DebugTest.test("sunyujia test");%>Hello Remote Debug在DebugTest類的test方法中做個斷點既可測試 下面按步驟進行講解1. 將web應用部署到Tomcat的webapp目錄下2. 修改Tomcat/bin/startup.bat檔案,在最前面加上如下代碼SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000注意上面命令必須寫成一行中間不能有換行,-前是空格-後是非空格,由於顯示器解析度不同,該文章在顯示的時候可能會有換行的情況。更多Web伺服器遠端偵錯參數可參見http://blog.csdn.net/sunyujia/archive/2008/03/23/2211109.aspx3.必須先啟動Tomcat啟動tomcat/bin/startup.bat參4.在com.syj.test.DebugTest.test方法中設定斷點5.在eclipse中配置debug,配置完成後點擊debug按鈕。6.開啟瀏覽器訪問在第1步部署的web應用,訪問index.jsp7.當瀏覽器訪問index.jsp時,由於調用了com.syj.test.DebugTest.test,又因在test方法中設定了斷點,所以程式會被斷點攔截,8.不需要調試的時候點擊斷開,需要調試的時候再點擊debug,非常方便,當調試過程中出現引用非本project的源碼時(例如跟蹤到tomcat裡面或spring,hibernate裡面),會提示找不到源碼,點擊相應提示的按鈕(到時候editor區只有一個按鈕,所以大家就不要問哪個按鈕了)可以添加源碼繼續調試,或在配置debug前就把需要的源碼都添加上,在source選項卡裡面,因為具體的基本調試這方面知識不屬於本話題討論範圍內,就不過多介紹了。遠端偵錯就介紹到這裡吧。打了這麼多字還是比較辛苦的,轉載請註明出處,謝謝!