Java应用远程调试

        在日常的Java应用开发中,我们经常需要调试代码。因为我的日常工作大都是开发J2EE应用,所以我经常的做法是在eclipse中,使用Tomcat插件,然后将tomcat插件的源码路径设置为应用程序对应的代码,接下来就可以捉Bug了。但是这种方式只适用于应用程序部署在本地的情况下,而我们在日常的项目运维中,应用程序是部署在远程的服务器上,而且企业级的应用程序动辄上G,数据库中积累了多年的业务数据。我想到的办法就是把程序部署在本地,然后再调试,但是这不是长久之计。那么如何才能既保留项目问题的真实环境,又能舒舒服服的调试问题呢,这就需要Java的远程调试功能了。

        关于什么是Java的远程调试,大家可以阅读参考文档。我只是将我知道远程调试功能以后,对我的开发环境做的一点工作记录下来,留作参考。

       首先说明我的测试环境,Eclipse3.5,Tomcat5.0。再说明一下什么是目标VM,它是指运行应用程序的远程Java虚拟机。由于Java的远程调试架构是基于Server/Client模式,所以配置远程调试环境时有以下两种方式:

     1.目标VM作为调试服务器

       设置Tomcat的Java选项, -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000"。 dt_socket表明是通过套接字进行通信,server=y表明目标VM作为调试服务器,address="8000"是指监听8000端口的连接请求。

        然后设置Eclipse的调试选项。在Eclipse的Debug Configurations,新建Remote Java Application,设置关键的属性Connection Type为Standard(Socket Attach),Host为调试服务器的IP,由于在本机所以设为127.0.0.1,Port为8000,与设置的Tomcat的Java选项address相同。在Source选项卡中设置源码搜索路径,保存后点击Debug即可开始调试远程的应用程序了,与调试本地程序没有什么区别。

     2.目标VM作为调试客户机

       作为调试客户机时配置与作为服务器的配置差不多。首先设置Java选项,-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000。因为是作为客户机,做一这里的address是IP地址和端口号。

       接下来也是设置Eclipse的调试选项,只不过把Connection Type设为Standard(Socket Listen),Port设为8000。

       因为我经常需要调试自己的本地应用程序,所以顺便改造了一下本地部署的Tomcat启动选项。其实Tomcat服务器已经提供了开启远程调试功能的选项,在命令行中以catalina.bat jpda start启动Tomcat,就是以调试服务器的方式启动的,默认通信方式是dt_shmen共享内存方式。

       那我们可以自己写一个启动脚本为my_catalina.bat,脚本的内容为

rem 设置通信方式为socket
set JPDA_TRANSPORT=dt_socket
rem 设置服务器的连接地址和端口号
set JPDA_ADDRESS=127.0.0.1:8000
rem 以调试模式启动Tomcat 
catalina.bat jpda run

      因为我打算将Tomcat作为调试客户端,而Tomcat默认是以调试服务器方式启动,所以需要修改Catalina.bat中的脚本,在脚本中搜索server=y,将其改为server=n。然后将Eclipse按照“2.目标VM作为调试客户机”中的设置即可。
      这样做的好处就是Tomcat的启动脚本固定不变,如果想调试程序的话,只要双击自己的脚本启动Tomcat即可。


参考文档: http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/


内容有些粗糙,只是为了记录一下新学的调试技巧,有不妥之处欢迎批评指正。



    


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值