Idea远程debug调试

什么是远程调试

工作中经常会出现测试环境出现bug的情况,但可能本地因为依赖外部第三方的一些接口本地环境无法ping通,导致本地没办法复现测试环境的bug,这时候就需要远程调试了。


远程调试注意事项

本地的代码必须和远程服务器上的字节码是同一个版本,保持一致,否则idea启动远程bug的时候会报错,所以需要提前查看测试环境

当前的分支和代码版本,本地先进行代码分支切换,保持和测试服务器代码的一致性。

通常idea打断点失效常见原因

  1. 本地与远程代码不一致
  2. 远程IP,端口配置错误
  3. 本地源码与二进制代码不一致:实际JVM是基于二进制代码运行的,需要重新编译。(先检查1和2,确认都没有问题,则进行本地代码重现编译后尝试)

使用远程调试时候,打了断点,别的人在测试这个页面的时候是会卡住的

日志不会打印在IDEA的控制台上。System.out 以及 log.info 还是打印在远程的。


实战演示

idea配置远程调试,name一般自定义,在公司取名对应不同的测试环境。host及你当前需要连接到哪个环境。

上传jar到远程服务器,方便演示,这里用的jar就是上一篇商场项目的商品模块-品牌打成的jar。

1
scp goods-service-1.0.0-SNAPSHOT.jar root@101.34.5.93:/usr/local

登录服务器,启动jar包

1
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar goods-service-1.0.0-SNAPSHOT.jar

这个时候,如果启动出现连接拒绝,首先在服务器telnet ip 端口,发现能够telnet的通,检查发现服务器的内存占用基本快满了,

上服务器修改nacos的jvm参数后,继续启动微服务,发现成功启动。注意服务器放开5005端口。

本地启动remote连接后,请求服务器接口。同时idea相应接口打上断点进行测试。

1
2
### 品牌删除操作
DELETE http://101.34.5.93:8081/brand/14

发现断点已经进入本地idea中。