一、jar包远程调试
步骤0:打包,放到服务器上
![](https://img-blog.csdnimg.cn/35e12bcf8a8b4e0e8c84780a7ad23702.png)
步骤1:
![](https://img-blog.csdnimg.cn/7ad1e87f3b004f86a7072c00f54d9beb.png)
步骤2:
![](https://img-blog.csdnimg.cn/d9b6cea92b9140c5937309a9956c5c8e.png)
步骤3
![](https://img-blog.csdnimg.cn/6788fafcf58f41e49881cb5151336310.png)
步骤4
下图注意的点有:红框选中的地方: host写 远程服务器的id地址,端口5005 不用改。蓝框选:你的项目名称(多个模块的项目会出现多个选项,选哪个都无所谓,我发现都能连接成功)
![](https://img-blog.csdnimg.cn/f58bf0cda9fd4ed89197e597c2b688e7.png)
步骤5:配置服务器的项目启动方式
运行命令:
###原有的运行项目方式是: java -jar XXX.jar ###现在在服务器上debug模式运行项目方式是:(针对jdk1.5-1.8的是该命令) java --agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar XXX.jar |
扩展:
临时使用指定的 项目启动环境: java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar XXX.jar ---spring.profiles.active=test 临时使用指定 项目加载的配置文件: java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar XXX.jar --spring-config.location=./aa.yml |
参数说明:
transport: 指定运行的被调试应用和调试者之间的通信协议,它由几个可选值: dt_socket:主要的方式,采用socket方式连接。 dt_shmem:采用共享内存方式连接,仅支持 Windows 平台。 server: 指定当前应用作为调试服务端还是客户端,默认为n。 如果你想将当前应用作为被调试应用,设置该值为 y,如果你想将当前应用作为客户端,作为调试的发起者,设置该值为n。 suspend: 当前应用启动后,是否阻塞应用直到被连接,默认值为 y。 在大部分的应用场景,这个值为 n,即不需要应用阻塞等待连接。一个可能为 y的应用场景是,你的程序在启动时出现了一个故障,为了调试,必须等到调试方连接上来后程序再启动。 address: 暴露的调试连接端口,默认值为 8000。 此端口一定不能与项目端口重复,且必须是服务器开放的端口。 onthrow: 当程序抛出设定异常时,中断调试。 onuncaught: 当程序抛出未捕获异常时,是否中断调试,默认值为 n。 launch: 当调试中断时,执行的程序。 timeout: 该参数限定为java -agentlib:jdwp=…可用,单位为毫秒ms。 当 suspend = y 时,该值表示等待连接的超时;当 suspend = n 时,该值表示连接后的使用超时。 |
参考命令:
1、-agentlib:jdwp=transport=dt_socket,server=y,address=8000:以 Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接。 2、-agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,timeout=5000:以 Socket 方式监听 8000 端口,当程序启动后 5 秒无调试者连接的话终止,程序启动阻塞(suspend 的默认值为y)直到被连接。 3、-agentlib:jdwp=transport=dt_shmem,server=y,suspend=n:选择可用的共享内存连接地址并使用stdout 打印,程序启动不阻塞。 4、-agentlib:jdwp=transport=dt_socket,address=myhost:8000:以 socket 方式连接到 myhost:8000上的调试程序,在连接成功前启动阻塞。 5、-agentlib:jdwp=transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub:以Socket 方式监听 8000 端口,程序启动阻塞(suspend 的默认值为 y)直到被连接。当抛出 IOException时中断调试,转而执行 usr/local/bin/debugstub程序。 |
步骤6:启动服务器 和 idea 的链接,就可以断点调试了
链接成功,控制台会输出:
![](https://img-blog.csdnimg.cn/18718f7af1734672863070bf9448d521.png)
二、war包tomcat部署远程调试
步骤1:
tomcat 以debug 模式启动的 war 包,才能被 idea remote 连接
tomcat 版本号: 9.0.62
修改 D:\apache-tomcat-9.0.62\bin\startup.bat 文件
![](https://img-blog.csdnimg.cn/d9222ecff2754ddb8ed964494f7eb3d1.png)
步骤2:双击 D:\apache-tomcat-9.0.62\bin\startup.bat 运行
第一行显示 Listening for transport dt_socket at address: 8000,意味着成功 debug 模式 启动
![](https://img-blog.csdnimg.cn/408fd533e84841c485289907bb84742c.png)
步骤3:监控端口设置的位置 (默认是8000)
D:\apache-tomcat-9.0.62\bin\catalina.bat
这个 address=%JPDA_ADDRESS% 的端口,就是idea remote 连接的端口
![](https://img-blog.csdnimg.cn/f61cae21f47545bd96b5aaa2ba02730d.png)
步骤4:idea remote 配置
端口号:就是上文的 address 端口号
![](https://img-blog.csdnimg.cn/3f84100efffa41eab923698cbb7dc1b1.png)
步骤5:启动服务器 和 idea 的链接,就可以断点调试了
链接成功,控制台会输出:
![](https://img-blog.csdnimg.cn/b5f55c5a68e047a696148e2bd21856d4.png)