MyEclipse/Eclipse调试远程Tomcat--基本配置以及简单优化

简介:既然看到这个博客,想必已经知道远程调试Tomcat是什么意思了,我这里只解释我这里写的不同之处。想要简单实现一个调试Tomcat并非难事,但是怎么用起来方便,就是我要实现的事情。

基本使用:

1)原理

    基于JDK提供的JPDA完成,Java 平台调试体系(Java Platform Debugger Architecture,JPDA),可以自行百度了解。

    基于tomcat的一个调试启动方式,正常启动tomcat的话,在windows下使用startup.bat启动,在linux下使用startup.sh启动,但都是调用的bin目录下的catalina.bat(catalina.sh)完成启动操作,因此需要远程调试时候就可以使用catalina.bat jpda start的方式启动。   --也就是说,你只要在启动时候使用catalina.bat jpda start的方式,就已经是启用调试模式了,只不过jpda的相关配置使用的都是默认值。我们要做的其实也就是在合适的地方去设置这些配置项。

2)配置步骤:

    服务器端配置:    --最终目的就是调整jpda的配置信息

        提示:JPDA的几个常用配置项

                TRANSPORT    通信方式,我们使用socket

                ADDRESS    SOCKET通信端口,默认为8000

                SUSPEND    是否从项目启动就开始调试,取值为y/n    --后面会介绍到

      a)Windows

            第一种方案,我们可以直接修改catalina.bat文件,定位到 tomcat根目录/bin/catalina.bat文件,找到类似代码:

if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_socket
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=8000
:gotJpdaAddress
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
set JPDA_SUSPEND=n
:gotJpdaSuspend
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
shift
:noJpda

            可以看到,这里就是对jpda的配置,使用的编码语言为bat,或许可以百度了解下bat的相关基本使用方式,我也只是了解一点儿点儿(完成这个够用)。

            很明显,这里面包含的有上面说的3个配置项,并且都有了默认值,要修改就直接修改即可,并且如果是基本使用,我们最多只用修改那个端口为自己需要的端口就行,看最上面,

""%1"" == ""jpda""   

            那个%1就代表调用这个catalina.bat后面跟的第一个参数,所以这个时候只要我们使用catalina.bat jpda    start即可启动调试。    --当然,我们要是直接双击bat文件,怎么传参(可以通过在此次打开命令行的方式),所以后面会有优化。

          第二种方案,我们通过启动时候指定配置项的方式,不对catalina.bat文件修改,为了防止出问题,我们新建一个startup_debug.bat的文件,直接在里面写简单的批处理信息,如下

set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=9000
catalina.bat jpda start
然后我们启动时候就直接双击startup_debug.bat即可。


      b)Linux下

       区分linux是因为linux下我在测试时候使用上面的第二种方案set JPDA_XXX没有效果,应该是shell下赋值不能这样用,因为我对shell编程并不熟,因此放弃了这种方式。大家可以自行测试。

        方案:基本同等于windows下的第一种方案,定位到tomcat目录下的bin目录下的catalina.sh文件,找到类似代码:

if [ "$1" = "jpda" ] ; then

  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z JPDA_SUSPEND ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
    CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"

  shift
fi

    这块儿就是里面对jpda的配置,基本跟windows下一样,不用过多解释,只不过shell编程中,$1代表后面跟的第一个参数。同样,可以在这里直接修改,启动时候也一样,只不过在后面跟上jpda start,如./catalina.sh jpda start即可

服务器端配置完成   

    TIPS:如果配置正确,并且启动方式正确(后面跟有jpda start),那么在启动后,会在控制台中打印出如下:

Listening for transport dt_socket at address: 9000


客户端配置(MyEclipse、Eclipse)   

    TIPS:不用管本地的Tomcat服务器,跟这个没有关系,这里只是使用了MyEclipse/Eclipse的调试的工具。

    依次打开菜单栏Run --> Debug Configurations...,在左侧找到Remote Java Application选项,右键new,即创建一个新的,右侧配置中:

    Name:随意,自己定,
    Project:后面选择准备调试的项目,
    Connection Type选Socket Attach默认即可,
    Host:远程TomcatIP,
    Port:远程Tomcat之前设置的socket通信端口,
    勾选下面的复选框(Allow termination of...)。。。

之后点应用AppJPDAly,然后Debug。



TIPS:可能点击之后没有效果,这样没关系,点开debug视图,在里面应该可以找到,并且可以加断点访问下试试。如果出现类似不能连接的错误,就去看远程服务器是否启动,远程IP是否可以ping通,端口是否被限制等信息。

~~~到此为止,基本配置已经完成,如果完成简单的测试这里就已经可以实现了,下面有使用优化。


简单优化:

    1)当前问题:

        上面说到的JPDA的配置项中有一个SUSPEND的,这个默认值都是n,代表不从项目初始开始调试,也就是说在这种模式下,项目必须先启动起来,然后通过eclipse连接,打断点,用户访问一个servlet可能就会进入断点调试;但有这样一种情况,就是我们可能在项目启动时候初始化了一些数据,这样我们就没有办法去调试在初始化时候的信息了。

        因此SUSPEND这个值设置为y的话,我们启动项目后,tomcat会卡在起始那里,直到有客户端连接,才会继续往下执行,这样我们就可以去调试初始化的代码了。

        但是,我们就需要因为配置这个值而来回去配置catalina文件了,并且如果这个事情交给了一个不太懂的人员(比如测试人员),然后他需要通过vim编辑器调整一个catalina.sh的文件(0.0,可想而知,是很艰难的一件事),因此,我是希望我们能在启动时候将这个参数跟在后面,比如  ./startup_debug.sh y 这样就代表从初始化调试。

    2)简单解决

          就是这种解决方法,将SUSPEND的值y/n作为参数,我们创建快捷启动的bat/sh,通过bat命令或者shell命令完成一些简单的传参并设置值的操作。

windows下的startup_debug.bat如下:

@echo off
set one=%1
if "%one%"=="" (set one="n")

set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=9000
set JPDA_SUSPEND="%one%"
catalina.bat jpda start

不过多介绍,就是在startup_debug.bat后面传了一个参数y,或者n,如果不传默认为n,这样在启动时候如果不需要初始化调试,就startup_debug.bat即可,如果需要在初始化时候调试就使用 startup_debug.bat y即可。


linux下的startup_debug.sh如下:

JPDA_SUSPEND="n"
if [ -n "$1" ]; then
 JPDA_SUSPEND="$1"
fi

CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd )

$CURDIR/catalina.sh jpda start "$JPDA_SUSPEND"
同样,不过多介绍,使用方式同上 ./startup_debug.sh或者./startup_debug.sh y



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

OK,到此为止,说明完成!    

~~征程初起,润物无声





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值