IDEA 远程 Debug
工作中经常会遇到开发时正常, 部署线上就出错的问题, 尤其是问题发生在引用的第三方 jar 时, 往往日志是不能定位问题的. 此时, 如果能用本地 IDEA 和代码 debug 调试服务器上的服务的话将会很好,很容易的定位和解决问题, 而 IDEA 其实本身就是支持本地连接远程 JVM 以实现远程 debug 的.
0. 环境准备
- 准备一个基于 maven 的 SpringBoot 项目做为演示, 并打成 jar 包在服务器运行
1. 远程服务器增加 JVM 参数开启调试模式
- 在服务器运行时添加如下参数(命令可以直接从 IDEA copy):
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
或者
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
- 完整命令:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 test-lsh-0.0.1-SNAPSHOT.jar
或者
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 test-lsh-0.0.1-SNAPSHOT.jar
其中
5005
为服务开放的调试端口, 可以随意指定. 当服务运行时看到如下输出即表示服务以调试模式运行成功.
2. IDEA 配置
- 进入 Edit Configurations
或者
- 添加远程连接
- 输入远程服务地址和调试端口(注意是第一步指定的调试端口, 不是服务启动端口)
其中:
Debugger Mode
:
Attach to remote JVM
: 连接到远程 JVMListen to remote JVM
: 开启一个端口供远程去连接
Command Line
显示的参数其实就是第一步服务端启动的参数, 可以直接 copy.
- 启动调试
当看到下面输出就表示远程调试已连接
3. Debug
- 首先在本地代码中添加断点
- 测试访问 controller, 观察debug 是否成功
请求
http://192.168.3.122:80/test
请求
http://192.168.3.122:80/test?user=JackLi