有时候会遇到一些bug
,测试环境重现不了,需要在预演或者生产上才出现,因此需要通过远程调试方式连接过去,可以单步调试问题。
单步调试会中断并等待,如果是生产问题,可以单独再启动一个生产一样的JVM
做测试。
Tomcat配置
启动Tomcat调试
Tomcat
默认支持单步调试,因此只需要开启即可:
# Windows
catalina.bat jpda start
# Linux
./catalina.sh jpda start
实际Tomcat的命令行参数:
# Tomcat中配置
-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
# 常用调试:
java -jar -agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8000,server=y,suspend=n xxx.jar
相关bat源码:
if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_socket
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=localhost:8000
:gotJpdaAddress
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
set JPDA_SUSPEND=n
:gotJpdaSuspend
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
shift
:noJpda
自定义Tomcat调试参数
默认情况下,Tomcat
调试参数监控:localhost:8000
如果需要自定义,可以另外编写一个bat
/sh文件,或者修改catalina.bat
文件,添加
# 自定义端口
set JPDA_ADDRESS=localhost:8001
# 上面这种配置只能localhost访问,远程访问一般都不在自己的机器上,需要配置成:
set JPDA_ADDRESS=0.0.0.0:8001
Intellij IDEA远程调试
在IDEA中添加一个运行配置,选择【Remote JVM Debug】:
配置远程Tomcat监听的地址:
连接成功之后可以看到提示信息:
Connected to the target VM, address: 'localhost:8000', transport: 'socket'
然后就可以打上断点,单步调试了。
Spring Boot工程远程配置
微服务一般通过jar包启动,因此在jar包启动参数中添加
java -jar -agentlib:jdwp=transport=dt_socket,address=0.0.0.0:8000,server=y,suspend=n master-service-provider.jar
# 可以看到输出就可以了,注意,jar包参数要在最后
# Listening for transport dt_socket at address: 8000
然后就可以通过Idea
链接过去了,和Tomcat
工程连接方式一样。
看到连接成功的消息就可以调试了。
Connected to the target VM, address: 'localhost:8000', transport: 'socket'