Featured image of post IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南

IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南

引言在开发分布式系统时,调试是一个重要但复杂的环节。开发者通常需要跨越多个服务、模块和线程来追踪和解决问题。在没有远程调试的情况下,许多开发者会在代码中添加各种日志语句,然后重新部署和上线来调试。这种。。。。。。。

引言

在开发分布式系统时,调试是一个重要但复杂的环节。开发者通常需要跨越多个服务、模块和线程来追踪和解决问题。在没有远程调试的情况下,许多开发者会在代码中添加各种日志语句,然后重新部署和上线来调试。这种方法不仅费时,而且可能引入额外的错误或问题。

有时候,在本地环境中调试时没有发现问题,但当代码被打包并部署到测试环境时,却会出现一堆莫名其妙的问题。这可能是因为不同的环境、配置或服务之间的交互导致了问题的出现。

幸运的是,有一种强大的工具可以帮助解决这些问题,那就是远程调试。通过远程调试,开发者可以在远程服务器上直接对Java应用程序进行调试,就像在本地环境中一样。这样,就可以避免重新部署和上线的耗时过程,并且可以实时查看和修改变量的值、查看堆栈信息等。

本文将介绍如何使用IntelliJ IDEA的远程调试功能来高效调试分布式系统。此外,我们还将探讨一些常见的调试问题和解决方法,帮助你更好地应对分布式系统开发中的挑战。

1、准备工作

1、确保你的IDEA已经安装并配置好,且已安装了Java开发工具包(JDK)。 确保你的Java应用程序已经部署到远程服务器上,并且可以通过远程访问进行调试。

2、启动调试应用

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

1
2
3
4
5
6
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=${debug_port}

或者

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=127.0.0.1:5555
将address设置为127.0.0.1:5555,表示将调试端口限制为本地访问,远程无法访问, 设置参数应该注意

其中的${debug_port}是用户自定义的,为debug端口,本例以5005端口为例。 如果只是临时调试,在端口号前面不要加上限制访问的IP地址,调试完成之后,将上述JVM参数去除掉之后重新发布下,防范开放远程调试端口可能带来的安全风险。

1
java  -Dspring.config.location=application-pre.yml  -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar  fubaodai-app-1.0-SNAPSHOT.jar

在这里插入图片描述

3、配置远程调试

  1. 在IDEA中,打开"Run/Debug Configurations"对话框。
  2. 在对话框中,点击"+“按钮,选择"Remote”。
  3. 在弹出的对话框中,填写远程服务器的连接信息,包括服务器IP地址、端口号、调试协议等。
  4. 点击"OK"按钮保存配置。 在这里插入图片描述 在这里插入图片描述 或者 Remote 在这里插入图片描述

4、本地IDEA启动debug模式

在这里插入图片描述

**要求:**双方代码一致,否则远程调试无法启动; 本地启动刚刚配置的 Remote Server,正常时会看到日志:

1
Connected to the target VM, address: 'xxx:5005', transport: 'socket'

在这里插入图片描述

5、设置断点,开始调试

本地 IDEA 代码中设置断点 浏览器或手机 HTTP 访问服务器 IDEA 即可在断点暂停并跟踪 在这里插入图片描述

6、远程调试的问题和注意事项

  1. 确保远程服务器的Java版本和IDEA的Java版本一致。
  2. 确保远程服务器的防火墙设置允许IDEA的调试连接通过。
  3. 确保远程服务器上已经安装了所需的调试工具(如jdb)。
  4. 在远程调试时,需要注意保护敏感信息,如密码、密钥等。
  5. 在修改代码时,需要同步远程服务器上的代码,以免出现版本不一致的问题。