Preface
一开始, 我只是想让 idea 远程运行代码, 像vscode运行前端一样, 也就是目前 idea 中的 Remote Development
(还处于 beta 版本).
不过意外让我发现了 idea 的远程调试功能, 这个功能非常适合测试环境 (快速调试 + 减轻电脑压力 + 方便联调), 更符合我们的使用场景, 让我们快速开始吧.
1. 新增配置
- Run/Debug Configurations 上点击新增 选择 Remote JVM Debug.
- 填入远程主机地址: Host
- 「可选」端口 5005 可以修改, 但服务端务必记得 开放端口
- 「可选」JDK 版本可选择对应范围
- 「可选」多个 model 项目, 选择 main 运行类所在的模块 model
- 拷贝 idea 给我们生成的
Command line arguments...
既命令行参数 - 保存配置
2. 远程服务端运行
我们使用 maven 工具进行打包, 然后传输到服务器上, 使用 java -jar … 或 nohup java -jar … 运行程序 (后者为后台运行)
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 AAA.jar
-agentlib:jdwp
开启调试环境 (jdwp
= java debug wire protocol
)
-Xrunjdwp
或 agentlib:jdwp
参数的选项有:
transport=dt_socket
表示连接JVM的方式. 调试数据传输方式 socket / shmem 共享内存 (Win)address=5005
TCP/IP 端口暴露, 用来调试服务端suspend=y
启动时是否中断. 在执行应用程序之前等待您连接, 如果是 ‘y’,告诉 JVM 等待调试器连接后才开始执行, 否则立即执行server=y/n
调试过程区分 服务端/客服端
2.1. 扩展问题: -Xdebug -Xrunjdwp
和 -agentlib:jdwp
有什么区别
Reference: stackoverflow
在 jdk 5 之前, 使用 -Xdebug
和 -Xrunjdwp
参数, 而这些选项在以后的版本中仍然有效, 但它将以解释模式而不是 JIT 模式运行, 这会更慢.
从 jdk 5 开始最好使用 -agentlib:jdwp
单一选项.
3. 开始调试
idea 中以 debug 模式运行我们的配置即可
(完)