Idea远程调试Spring Boot项目

本文介绍了一种在生产环境中远程调试SpringBoot项目的有效方法。通过配置IntelliJ IDEA的远程调试,利用特定的JVM参数启动远程服务,可以实现在本地IDE上连接并调试远端的运行实例,这对于复现和解决线上问题极为关键。
背景

公司有个Spring Boot的单体项目最近出了点问题,因为生产环境部署在国外,本地不能再现现象,而且单纯的看log也看不出什么问题,所以尝试远程debug项目。

配置remote
  • 打开Idea的Edit Configurations
    在这里插入图片描述
  • 新增一个remote
    在这里插入图片描述
  • 之后会出现配置框,填写服务器ip,调试的端口等信息
    在这里插入图片描述
  • 以上就配置好了,点击Apply或者OK
  • 关于debug模式解释(默认是Attach)
    在这里插入图片描述
    • Attach:此种模式下,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;
    • Listen: 此种模式下,是我们(调试客户端)去监听一个端口,当调试服务端准备好了,就会进行连接。
部署服务
  • 使用如下命令部署Jar包

screen -d -m java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 xxx.jar

  • 其中-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005就是上面复制的信息。
开始远程调试

以debug模式启动项目,看到如下截图就证明已经连接成功,接下来就可以愉快的打断点debug来解决问题了。

在这里插入图片描述

注意事项
  • 需要注意启动顺序,先启动服务器,再启动本地Remote
  • idea中的项目要和服务器中的项目保持一致
  • debug的过程中一定要避免不小心更改用户的数据,这会给公司带来一定的损失
总结

因为一些问题可能是需要线上的数据才可以重现,所以这种远程调试的方法还是比较重要的。

Spring Boot 项目中进行远程调试,可以通过在启动时添加 JVM 参数来启用调试功能。以下是具体的配置和使用方法: ### 通过 Maven 启动 Spring Boot 应用并启用远程调试 在开发环境中,如果使用 Maven 插件来启动 Spring Boot 应用,可以通过 `spring-boot:run` 命令并附加 JVM 参数来启用远程调试功能。执行以下命令: ```bash mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" ``` 该命令启用了远程调试,并将调试端口设置为 5005。调试器可以通过此端口连接到正在运行的应用程序,从而进行断点调试[^3]。 ### 通过 JAR 包启动 Spring Boot 应用并启用远程调试 在生产环境或远程服务器上部署 Spring Boot 应用时,通常会以 JAR 包形式运行。在启动 JAR 包时,可以通过附加 JVM 参数来启用远程调试。执行以下命令: ```bash java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar spring-boot-demo.jar ``` 该命令启用了远程调试功能,并将调试端口设置为 8000。调试器可以通过此端口连接远程服务器上的 Spring Boot 应用程序[^4]。 ### 在 IntelliJ IDEA 中配置远程调试 在 IntelliJ IDEA 中,可以通过以下步骤配置远程调试: 1. 打开 **Run > Edit Configurations**。 2. 点击 **+** 号,选择 **Remote JVM Debug**。 3. 配置远程服务器的 IP 地址和调试端口(如 5005 或 8000)。 4. 应用配置并启动调试。 在调试过程中,可以在 IntelliJ IDEA 的源码中设置断点,并通过触发相应的业务逻辑进入调试模式[^5]。 ### 通过 `agentlib:jdwp` 启用远程调试 另一种启用远程调试的方式是使用 `agentlib:jdwp` 参数。例如,在启动 Spring Boot 应用时,可以使用以下命令: ```bash java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=40021 springboot-demo.jar ``` 该命令启用了 JDWP(Java Debug Wire Protocol),并通过指定的端口(如 40021)进行远程调试[^5]。 ### 注意事项 - 确保远程服务器的防火墙或安全组配置允许调试端口的访问。 - 调试模式会对性能产生一定影响,因此在生产环境中应谨慎使用。 - `suspend=n` 表示应用启动时不会暂停,直到调试连接后才开始调试。如果希望应用在启动时等待调试连接,可以将 `suspend=n` 改为 `suspend=y`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值