java 远程调试(java application与web application)

2016-07-12 10:17:37来源:oschina作者:漫天的沙人点击

如摘要中所述,在联调时经常性的需要将程序部署到测试机器上,此时要调试显得很不方便。以前的做法都是在程序中打印信息来进行追踪,但是这种方法很有局限性,因为往往无法一次就定位到有问题的地方,需要不断的修改程序打印的语句,不断的重启应用,这需要花费大量的时间和精力。因此,采用远程调试会是一种好的解决方式。下面将会对java application和web application两种入手进行说明。


一、Java Application的远程调试


1、准备要调试的server端环境


首先准备一段小的代码,并且在main方法中调用,我这边写了一段没有任何意义的代码,仅仅是为了演示需要,如下:


packagecom.zzq.test;
/**
*@authorzhengzhqE-mail:zzq0324@qq.com
*@version创建时间:2015-9-4下午02:59:35
*/
publicclassRemoteDebug{
publicstaticvoidcheckName(Stringname){
if("name1".equals(name)){
System.out.println("thisisname1");
}elseif("name2".equals(name)){
System.out.println("thisisname2");
}else{
System.out.println("unknowname"+name+"!!!");
}
}
publicstaticvoidmain(String[]args){
if(args.length>0){
checkName(args[0]);
}else{
checkName("unknow");
}
}
}

如果运行中有传递值,将第一个值作为name传递给方法,很简单的代码。通过开发工具export-runnable jar,指定好执行的Main class->finish,jar包生成完成,我这边导出为debug.jar。此时在命令行执行java -jar debug.jar,出现如下图:



在java -jar中加入其他的启动信息,则程序会开启远程调试模式,并处于阻塞状态,如下:


java-Xms700m-Xmx700m-Xdebug-server-Xrunjdwp:transport=dt_socket,server=y,address=12345-jardebug.jarname1


其中address为指定的端口。


2、指定调试的client端环境


调试的代码由于本地环境拥有,所以直接在IDE中右击->debug As->Debug Configurations,弹出如下窗口,在Remote Application下可以配置要远程调试的项目:



配置完成后,点击弹出窗下的debug,则程序自动会与调试的server端连接上。如果server端没启动,则意味着端口没监听,会报Connection refused;否则程序根据设置的断点进入执行。




二、Web Application


将应用打成war包放到tomcat/webapps目录下,然后设置tomcat/conf/startup.sh,在前面加入如下的脚本


Linux中配置tomcat在catalina.sh中添加如下
CATALINA_OPTS="-Xdebug-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"(不要换行,要在同一行)
Window中修改catalina,bat文件,添加:
Set“CATALINA_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

然后启动即可,启动过程中会有打印一行关于远程调试监听:



客户端的配置与Java Application一致,运行即可进行调试i


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台