1. 程式人生 > >使用Eclipse+tomcat進行遠端除錯

使用Eclipse+tomcat進行遠端除錯

轉自http://blog.csdn.net/sunyujia/article/details/2211109
今天決定做件有意義的事,寫篇圖文並茂的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部署了。 這次例子的原始碼很簡單: Jsp 原始碼如下index.jsp <%
com.syj.test.DebugTest.test("sunyujia test");%> Hello Remote Debug DebugTest類的test方法中做個斷點既可測試 下面按步驟進行講解 1.web應用部署到Tomcatwebapp目錄下 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伺服器遠端除錯引數可參見 3.必須先啟動Tomcat啟動tomcat/bin/startup.bat參下圖 4.在com.syj.test.DebugTest.test方法中設定斷點 5在eclipse中配置debug,配置完成後點選debug按鈕。如圖: 6.開啟瀏覽器訪問在第1步部署的web應用,訪問index.jsp 7.當瀏覽器訪問index.jsp時,由於呼叫了com.syj.test.DebugTest.test,又因在test方法中設定了斷點,所以程式會被斷點攔截,如圖: 8.不需要除錯的時候點選斷開,需要除錯的時候再點選debug,非常方便,當除錯過程中出現引用非本project的原始碼時(例如跟蹤到tomcat裡面或spring,hibernate裡面),會提示找不到原始碼,點選相應提示的按鈕(到時候editor區只有一個按鈕,所以大家就不要問哪個按鈕了)可以新增原始碼繼續除錯,或在配置debug前就把需要的原始碼都新增上,在source選項卡里面,因為具體的基本除錯這方面知識不屬於本話題討論範圍內,就不過多介紹了。 遠端除錯就介紹到這裡吧。打了這麼多字還是比較辛苦的,轉載請註明出處,謝謝!