java远程调试,Eclipse调试
debug需要调试器(eclipse是一种调试器)和目标应用程序(待调试的程序)协同工作,这样才能有效调试,因此,调试链路有两个节点:调试器和目标应用程序。这两个节点都可以作为服务端,等待对方的连接,该参数就是控制究竟哪一方作为服务端的。n:运行程序启动脚本后,jvm自动加载,然后开启debug端口号。应用程序开启debug模式,启动应用,然后调试器进行连接。y:运行程序启动脚本后,发现jvm会暂
一、背景
用JBOSS启动应用服务、有问题后需要进行远程调试
二、操作
1、在jboss配置远程调试参数并启动
修改jboss\bin目录下的run.bat文件
rem set JAVA_OPTS=-classic -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%
set JAVA_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%
启动后会停止,等调试器启动后在运行
java6运行:
java8运行:
2、eclipse上启动远程调试
启动后就可以打断点进行debug调试了
三:不同jdk的问题
问题:-classic到底是干什么用的?因为之前默认有这个所以没删,测试发现用java8启动失败后删了就好了。
远程参数中加了JAVA_OPTS=-classic
set JAVA_OPTS=-classic -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%
用java6测试提示这个,但是可以正常调试:
用java8测试运行不起来:
注意:不同java版本可能支持的参数不一样
四、各参数含义说明
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
1、-Xdebug
让jvm在调试模式下运行,必须开启
2、-Xnoagent
禁用默认的sun默认的调试器
3、-Djava.compiler=NONE
禁止jvm加载JIT编译器
4、-Xrunjdwp:transport=dt_socket
让jvm加载jdwp(java debug wire protocol,java调试网络协议)的实现。
transport协议传输方式,dt_sorket表示使用套接字进行传输。
5、server=y
debug需要调试器(eclipse是一种调试器)和目标应用程序(待调试的程序)协同工作,这样才能有效调试,因此,调试链路有两个节点:调试器和目标应用程序。这两个节点都可以作为服务端,等待对方的连接,该参数就是控制究竟哪一方作为服务端的。该参数有两种取值:
y:目标应用程序作为服务端。应用程序开启debug模式,启动应用,然后调试器进行连接。
n:调试器作为服务端。
6、address=8787
套接字传输的端口号
7、suspend=y
是否延迟加载jvm。
y:运行程序启动脚本后,发现jvm会暂停,直到调试器连接过来后,jvm会继续加载。。
n:运行程序启动脚本后,jvm自动加载,然后开启debug端口号。调试器随时连接到jvm。
五、待考虑
1、JAVA_OPTS=-classic, -classic的作用?
2、server=y、suspend=y,值改成 n 之后,怎么调试?
更多推荐
所有评论(0)