当我们在本地写代码的时候,我们可以在编辑器开启debug模式,快速定位bug. 当代码跑在服务器上的时候,也是可以进行远程debug的.快速进行bug定位.
说明:
- remote debug 是jvm 原生支持的功能 即JPDA
- 需要本地的java类和服务器上的class版本一致 否则会错行
- 服务器要监听一个端口 保证本地到此端口 网络通
服务端配置
web应用(EE) remote dubug
以tomcat为例,weblogic没折腾过,但是只要在合适的位置添加(修改)合适的java启动参数肯定是可以的
- 登录服务器
cd TOMCAT_HOME/bin
- 修改
catalina.sh
- 将
JPDA_ADDRESS="localhost:8000"
修改为JPDA_ADDRESS="0.0.0.0:8000"
(说明:如果不修改此处,只能本机访问) ./shutdown.sh
./catalina.sh jpda start
(不要使用startup.sh启动)
说明:
- 端口可以自定义,只要将8000修改为你想要的就可以(>1024)即可
jar应用(SE) remote debug
eg:
之前的bash
java -cp agent2.jar com.hfvast.App 8888 47.94.6.183 22
改造后的脚本
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8012,server=y,suspend=n -cp agent2.jar com.hfvast.App 8888 47.94.6.183 22
-Xdebug是通知JVM工作在DEBUG模式下
-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:
transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。
server参数是指是否支持在server模式的VM中.
onthrow指明,当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。
launch指明,当JVM被中断下来时,执行的可执行程序。该参数可选
suspend指明,是否在调试客户端建立起来后,再执行JVM.当jar非守护性 则需要设置suspend=y
onuncaught(=y或n)指明出现uncaught exception 后,是否中断JVM的执行.
同样端口也是可以自定义的