IntelliJ IDEA - 使用 IDEA Remote Debug 进行远程调试

简介: IntelliJ IDEA - 使用 IDEA Remote Debug 进行远程调试

前言

对于分布式系统的调试不知道大家有什么好的方法。对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时,有什么更好的办法呢?

有时候,本地调试的时候没有问题,打包部署到测试环境的时候却爆出一堆莫名其妙的问题,这时该怎么办呢?

偶然间了解到的远程调试的功能简直是一把利器,能够非常好地解决上述问题,还不赶紧来了解一下?

远程调试

使用特定JVM参数运行服务端代码

要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是:


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

其中的${debug_port}是用户自定义的,为debug端口,本例以5555端口为例。

本人在这里踩过一个坑,必须要说一下。在使用公司内部的自动化部署平台NDP进行应用部署时,该平台号称支持远程调试,只需要在某个配置页面配置一下调试端口号(没有填写任何IP相关的信息),并且重新发布一下应用即可。事实上也可以发现,上述JVM参数中唯一可变的就是${debug_port}。但是实际在本地连接时发现却始终连不上5555 的调试端口,仔细排查才发现,下面截取了NDP发布的应用所有JVM参数列表中与远程调试相关的JVM启动参数如下:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555

其中的${debug_port}是用户自定义的,为debug端口,本例以5555端口为例。

本人在这里踩过一个坑,必须要说一下。在使用公司内部的自动化部署平台NDP进行应用部署时,该平台号称支持远程调试,只需要在某个配置页面配置一下调试端口号(没有填写任何IP相关的信息),并且重新发布一下应用即可。事实上也可以发现,上述JVM参数中唯一可变的就是${debug_port}。但是实际在本地连接时发现却始终连不上5555 的调试端口,仔细排查才发现,下面截取了NDP发布的应用所有JVM参数列表中与远程调试相关的JVM启动参数如下:


-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555

将address设置为127.0.0.1:5555,表示将调试端口限制为本地访问,远程无法访问,这个应该是NDP平台的一个bug,我们在自己设置JVM的启动参数时也需要格外注意。

如果只是临时调试,在端口号前面不要加上限制访问的IP地址,调试完成之后,将上述JVM参数去除掉之后重新发布下,防范开放远程调试端口可能带来的安全风险。

本地连接远程服务器debug端口

打开Intellij IDEA,在顶部靠右的地方选择”Edit Configurations…”,进去之后点击+号,选择”Remote”,按照下图的只是填写红框内的内容,其中Name填写名称,这里为remote webserver,host为远程代码运行的机器的ip/hostname,port为上一步指定的debug_port,本例是5555。然后点击Apply,最后点击OK即可。


image.png

本地IDEA启动debug模式

现在在上一步选择”Edit Configurations…”的下拉框的位置选择上一步创建的remote webserver,然后点击右边的debug按钮(长的像臭虫那个),看控制台日志,如果出现类似“Connected to the target VM, address: ‘xx.xx.xx.xx:5555’, transport: ‘socket’”的字样,就表示连接成功过了。我这里实际显示的内容如下:

Connected to the target VM, address: '10.185.0.192:15555', transport: 'socket'

设置断点,开始调试

远程debug模式已经开启,现在可以在需要调试的代码中打断点了,比如:


image.png


备注

需要注意的是,用于远程debug的代码必须与远程部署的代码完全一致,不能发生任何的修改,否则打上的断点将无法命中,切记切记。

目录
相关文章
|
4天前
|
Java
IDEA debug HashMap源码的心得
IDEA debug HashMap源码的心得
11 0
|
1天前
|
Java 网络安全 网络协议
IDEA实现java远程调试
IDEA实现java远程调试
15 3
|
3天前
|
安全 Java 数据库连接
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通
|
3天前
|
存储 IDE Java
IntelliJ IDEA 安装及配置详细教程
IntelliJ IDEA 安装及配置详细教程
15 0
|
11天前
Mac上IntelliJ IDEA设置类注释和方法注释带作者和日期
Mac上IntelliJ IDEA设置类注释和方法注释带作者和日期
|
11天前
|
XML SQL Java
IntelliJ IDEA 插件 MybatisX 在mapper和xml间跳转
IntelliJ IDEA 插件 MybatisX 在mapper和xml间跳转
|
11天前
|
Java
Intellij IDEA运行报Command line is too long的解决办法
Intellij IDEA运行报Command line is too long的解决办法
|
12天前
|
网络协议 安全 关系型数据库
IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库
IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库
22 1
|
IDE 前端开发 数据可视化
保命小诀窍:IDEA远程Debug技巧,你了解吗?
前言 昨天看到一个问题,“疫情结束后你最想吃什么?” 仔细想了一下,火锅?烤肉? 看了一下体重秤,怕是只能报个健身房了。 你以为你胖N斤的时间复杂度是O(2^N), 事实上它是O(1),嗖嗖的.
|
Java 程序员 Android开发
熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】(上)
熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】(上)
熟练使用IDEA的断点调试(Breakpoint),大大提升你调试代码的效率(行断点、属性断点、异常断点、条件断点、远程debug...)【享学Java】(上)