linux下的java远程调试jpda+tomcat(转)

9/6/2015来源:Java教程人气:1443

linux下的java远程调试jpda+tomcat(转)

转载自 http://blog.csdn.net/kongqz/article/details/3971263

项目放到linux服务器了,服务器的环境或者数据可能和我们本地不一样,这个时候我们可能需要远程的断点进行调试,来查看请求过程中的各个变量的值。这里我们的应用服务器用的tomcat5.5.17

这个时候你需要知道JPDA这个概念。

简单的概括下JPDA:

Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成  1.Java虚拟机提供了Java调试的功能  2.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试

这里我们的eclipse就是那个调试的前台。我们需要将本地的调试平台和服务器运行的项目结合起来。

第一步:启动tomcat的jpda支持

默认情况下tomcat的启动命令是: ./catalina.sh start 但是这个命令是没有启动我们的jpda这个服务

我们需要启动jpda服务,好在tomcat提供了集成化的命令:./catalina.sh jpda start,这样就启动了我们服务器jvm的jpda服务了。tomcat默认的jpda服务的端口是8000,这个时候我们使用命令看下 netstat -an,看看8000端口是不是已经启动了。

第二步:从本地建立jpda的断点调试前台

1、在eclipse的“Run”菜单下选择“Debug...”菜单(有的eclipse版本是debug configuration),在弹出的对话框左边的菜单中选择“Remote Java application”菜单,右键点击,选择“New”,这个时候弹出一个需要填写参数的对话框

2、在弹出的框中,定义项目名称,选择要断点调试的项目,Connect type(默认Standard (Socket Attach)),定义我们的web项目放在哪里(就是我们的远程虚拟机在哪里),填写他的ip以及提供的服务端口号,tomcat的这个版本是8000.最后选择source标签,将项目的源码加入,我这里一般选择add一个java PRoject的方式

3、切换到debug模式下,就能看到debug的相关选项都是激活状态。在本地的source文件中加断点,然后请求服务的链接,看看我们的断点调试是否成功。

以上的操作经过我本人验证过。

很多的服务器都提供这种远程调试的接口服务,所以不要局限于tomcat可用,最主要的区别就是每个服务器提供的jpda的启动方式不同,提供的服务端口不同,这里我们tomcat5.5提供的启动方式是catalia.sh jpda start这种命令行的方式,端口默认用8000。大家在开发的时候按照服务器提供的说明进行调试吧

加点常看的操作命令:

1、查看当前tomcat的进程号

[java]view plaincopy
  1. [root@localhostbin]#ps-ef|greptomcat
  2. root148571609:22pts/000:00:35/usr/java/jdk1.6.0_22/bin/java-Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n-Djava.endorsed.dirs=/usr/local/tomcat6/endorsed-classpath/usr/local/tomcat6/bin/bootstrap.jar-Dcatalina.base=/usr/local/tomcat6-Dcatalina.home=/usr/local/tomcat6-Djava.io.tmpdir=/usr/local/tomcat6/temporg.apache.catalina.startup.Bootstrapstart
  3. root1505514811009:31pts/000:00:00greptomcat

通过上边的命令执行后可以看到tomcat的进程号是14857

2、杀掉当前的tomcat进程

[c-sharp]view plaincopy
  1. [root@localhostbin]#kill-914857

为啥这么杀死进程?因为用常规的shutdown.sh 杀死tomcat进程很慢,偶尔因为资源占用还关闭不了,索性直接做掉这个进程3、启动jpda的远程调试

[java]view plaincopy
  1. [root@localhostbin]#cd/usr/local/tomcat6/bin
  2. [root@localhostbin]#./catalina.shjpdastart

4、查看默认的8000对外服务端口是否启动

[java]view plaincopy
  1. [root@localhostbin]#netstat-an|grep8000
  2. tcp00192.168.119.149:8000192.168.70.80:1535ESTABLISHED

5、测试完毕如何关闭?

直接杀死tomcat进程就行了,或者按照正常步骤关闭tomcat就ok了

6、直接按照上边的方法进行远程连接调试吧。在本地源码中增加断点,在查看远程服务器。注意,这个8000端口不影响原来的任何服务。只是当我们将项目上线的时候就不要这么启动我们的tomcat了。