使用Eclipse进行远程调试【转】

  今天决定作件有意义的事,写篇图文并茂的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服务器远程调试参数可参见
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选项卡里面,由于具体的基本调试这方面知识不属于本话题讨论范围内,就不过多介绍了。
远程调试就介绍到这里吧。打了这么多字仍是比较辛苦的,转载请注明出处,谢谢!
 
转自:http://blog.csdn.net/sunyujia/article/details/2614614
相关文章
相关标签/搜索