一、启动jar应用前的准备工作:
在启动jar包时加入jvm参数
以下是不同版本jdk加的参数
- JDK 9+:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8882
- JDK 5-8:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8882
- JDK 4:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8882
- JDK 3-:
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8882
这里的debug_port
是对外暴露的debug测试端口
二、idea的配置
- 打开
Edit Configurations -> Add New Configuration -
,添加remote JVM Debug
; - 设置
ip
,端口号
,选择jdk版本
- debug运行,即可使用debug模式操作远程应用
三:看起来很美好,其实没啥用的感觉
- 你必须保证本地代码和线上应用一致,行号什么的也要一致,那你改代码是不会生效的
- 你在打断点测试时,其他人访问也会在断点停止,会影响使用
- 日志是在应用端打印,在idea啥也木有
附录:
-Xdebug
:通知JVM工作在调试模式下-Xrunjdwp
:通知JVM使用(java debug wire protocol)来运行调试环境。参数同时有一系列的调试选项session
:指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享内存方式,其中dt_shmem只适用于窗口平台server
参数是指是否支持在服务器模式的虚拟机中。onthrow
:指明当产生该类型的异常时,JVM就会中断下来,进行调式该参数任选。release
:指明当JVM被中断下来时,执行的可执行程序该参数可选suspend
:指明:是否在调试客户端建立起来后,再执行 JVM。onuncaught(= y或n)
指明出现未捕获的异常后,是否中断JVM的执行。