Idea远程调试 (包含调试docker容器)

本文介绍了Java远程调试的原理,强调了调试本质是通过通信协议实现的。详细讲解了如何在远程服务器及Docker容器中配置JVM启动参数以启用调试,并指导如何在IDEA中设置远程调试客户端,确保服务启动后可以正常进行远程调试。注意调试速度可能受CPU性能和网络状况影响,且无法实时修改代码。

首先我们说一下调试的本质,了解了调试的本质我们就很容易理解远程调试是怎么来的了。

  1. Java本地debug时我们常常以为breakpointer打在了java文件中,看到到了breakpointer处jvm停了下来,认为debug时jvm运行的就是java文件了。其实并不是这样。jvm只能运行经过编译后的class文件,那么breakpointer打在了java文件中虚拟机怎么知道什么时候暂停呢,答案当然是通信了,本地运行的服务和IDE进行通信确定断点的位置和单签运行stack中的value。

  2. Java远程调试的原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的,两者之间可以通过socket进行通信

说完了本质,接下来的工作就容易了。远程调试是jvm附带的功能,jvm的功能当然是用启动参数来开关了。

首先我们在远程服务器jvm启动参数里添加如下命令

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address={port}

其中port是对外暴露的debug端口。

  • 如果是docker容器的话还要在docker.yml文件中这么配置
    在这里插入图片描述
    配置好参数和映射端口。有安全策略的需要打开对对应端口(我这里是5555端口)的策略。
    这样服务器端就配置完成了,这时候把服务启动起来。

然后配置客户端

  1. 首先要保证本地代码和远端完全一致,这样socket通信才能正确匹配到breakpointer。 然后打开Edit Configurations,

在这里插入图片描述

  1. 点击+号,选择”Remote”,其中Name填写名称,这里为bosstest_hw,host为远程代码运行的机器的ip地址(配置好域名的也可用域名),port为上一步指定的debug_port,我这里是5555。然点击Apply,OK。这里的参数idea会自动生成。

在这里插入图片描述

  1. 配置好后就可以到这里选择配置好的这一项

在这里插入图片描述

  1. 之后点击debug

在这里插入图片描述

  1. 启动成功就是这样了

在这里插入图片描述
之后尽情的打断点debug吧。需要注意的是cpu性能不足或者网速过慢这里的debug速度会很受影响,另外切记不能修改代码。因为执行的不是本地代码。👌

附:
开启远程visualVM JMX连接参数

JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=172.16.1.53 -Dcom.sun.management.jmxremote.rmi.port=9999"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值