IDEA远程调试Java程序

引言

远程debug的意思是启动一个Java进程,启动一个debugger进程,将两者连接起来,利用debugger来debug Java进程。 事实上目前所有的IDE的debug功能都是通过远程debug方式来实现的,它们都利用了一个叫做JDPA(Java Platform Debugger Architecture)的技术。 利用JDPA我们除了能够在IDE开发的时候debug,也能够将IDE attach到一个生产环境上正在运行的Java进程做debug(事实上这两个场景在本质上是一样的)。

一、IDEA的本地调试

在IDEA本地上调试Java程序,通常就是以debug模式启动应用
image.png
区别于普通的运行启动,debug模式下启动应用时,可以在Console中看到一行打印:
Connected to the target VM, address: '127.0.0.1:64782', transport: 'socket'
翻译过来就是:连接到了VM(即Java程序),地址:127.0.0.1:64782,使用socket通信。
这其实就是使用了JDPA将debugger进程attach到Java程序上了。

二、IDEA的远程调试

IDEA的本地调试,其本质其实也是远程调试,也是利用网络通信方式进行的。
那么IDEA的远程调试,其实也就是模拟出IDEA是如何进行本地调试的。

1.新建一个远程调试

Run -> Edit Configurations…
image.png
点击+号,选择Remote
image.png

2.配置Debugger参数

JVM参数:
用于被远程调试的Java应用,Java应用在启动时,需要配置这些JVM参数
Debugger mode:

  • attach:attach的意思是debugger连接到被debug的Java进程,是主动式的
  • listen:listen的意思是debugger监听由Java进程发送过来的通信,是被动式的

Host & Port:
指定被debug的Java程序所开启的调试端口,注意不是Java的进程端口
image.png

3.配置Java程序参数

Java程序配置JVM参数,根据JDK版本选择对应的参数,如本次配置:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

4.运行Java程序

选择普通的Run方式启动。
运行Java程序时,可以看到类似如下的打印:
Listening for transport dt_socket at address: 5005
image.png

5.运行Debugger

选择Debug方式启动。
运行Debugger时,可以看到打印:
Connected to the target VM, address: 'localhost:5005', transport: 'socket'
此时,证明debugger成功连接到Java程序。
image.png

参考

[1] 远程Debug Java进程的方法


推荐文章

AI最佳实践全栈式从0到1开发个人博客系统


创作不易,只需小手一动我就能开心收获(●゜ⅴ゜)ノ:

|点赞 ❤️|收藏 🌟|评论 💬|

### 配置 IntelliJ IDEA 进行 Java 项目远程调试 为了设置和配置用于 Java 应用程序远程调试环境,在 IntelliJ IDEA 中创建了一个简单的默认调试配置[^1]。这允许开发者在应用程序运行于不同机器上时,通过网络连接对其进行调试。 #### 设置远程 JVM 参数 当目标应用启动时,需确保其 JVM 启动参数包含了必要的选项来启用远程调试功能: ```bash -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ``` 这段命令告诉 JVM 打开端口 `5005` 并等待来自 IDE调试器连接请求;其中 `suspend=n` 表示不阻塞应用直到有调试器附着前继续执行。 #### 创建远程调试配置 在 IntelliJ IDEA 内部完成如下操作以建立新的远程调试会话: - **打开编辑配置窗口**: 转到菜单栏中的 "Run" -> "Edit Configurations..." - **添加新配置**: 点击左上方加号按钮并选择 "Remote". - **填写必要字段**: - Name: 输入名称以便识别此特定配置. - Host: 如果在同一台计算机上,则保持为空或填入 localhost; 若跨网段则输入服务器 IP 地址. - Port: 填写之前指定给 JDWP 的监听端口号 (通常是 5005). 此时已经成功建立了基本的远程调试框架. 对于更复杂的测试场景,可以考虑集成单元测试库简化参数化测试编写过程,例如使用 Burst 或者 JUnitParams 来提高效率和可读性[^2]. 不过这些工具主要用于本地开发阶段而非直接关联至远程调试流程中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我喺小VIE

努力创作,值得肯定●゜ⅴ゜)ノ

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值