使用IDEA对SpringBoot应用进行远程调试方式

 更新时间:2025年02月22日 09:27:00   作者:不会画画的画师  
文章介绍了如何在IDEA中对部署在服务器上的SpringBoot应用进行远程调试,通过配置远程调试端口和启动参数,本地IDEA可以设置断点并进行调试

情境描述

有时候,应用开发完成发布到服务器时出现异常,但本地却无法复现,也无法通过服务器上的日志定位。

此时可以通过IDEA对部署在服务器上的SpringBoot应用进行远程调试。

环境描述

  • 远程服务器: CentOS 7
  • 语言环境:JDK 1.8
  • SpringBoot版本:2.3.4.RELEASE
  • IDEA版本:2020.2

操作步骤

测试应用编写与发布

本地使用IDEA写一个简单的SpringBoot web应用,开放一个接口,代码如下:

package com.example.remoteapp.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author UV
 * @Version 0.1
 * @Data 2020/9/29
 * @Description
 */
@RestController
public class OpenController {

    @GetMapping("/hello")
    public void hello() {
        System.out.println("此处是断点");
        System.out.println("此处是正常业务内容");
    }
}

使用mvn install将应用打成jar包,上传到服务器上。

IDEA远程调试配置

打开项目配置

添加远程应用

设置远程应用名、debugger模式(Debugger mode)、配置远程服务器地址(Host)、端口(Port)、应用模块(Use module classpath)

此处的Port为远程应用的远程调试端口,不是应用本身的业务访问端口。

配置完成后,复制下图中的参数,作为远程应用的启动参数

启动远程应用

登陆服务器,启动jar包

$ java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar remoteapp-0.0.1-SNAPSHOT.jar 
Listening for transport dt_socket at address: 5005

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.4.RELEASE)

2020-09-29 02:20:47.247  INFO 798 --- [           main] c.e.remoteapp.RemoteappApplication       : Starting RemoteappApplication v0.0.1-SNAPSHOT on migration-plat01.novalocal with PID 798 (/root/remoteapp-0.0.1-SNAPSHOT.jar started by root in /root)
2020-09-29 02:20:47.252  INFO 798 --- [           main] c.e.remoteapp.RemoteappApplication       : No active profile set, falling back to default profiles: default
2020-09-29 02:20:49.000  INFO 798 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-09-29 02:20:49.024  INFO 798 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-09-29 02:20:49.024  INFO 798 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.38]
2020-09-29 02:20:49.120  INFO 798 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-09-29 02:20:49.121  INFO 798 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1773 ms
2020-09-29 02:20:49.428  INFO 798 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-09-29 02:20:49.697  INFO 798 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-09-29 02:20:49.712  INFO 798 --- [           main] c.e.remoteapp.RemoteappApplication       : Started RemoteappApplication in 3.297 seconds (JVM running for 3.953)
2020-09-29 02:21:54.307  INFO 798 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-09-29 02:21:54.307  INFO 798 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-09-29 02:21:54.318  INFO 798 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 11 ms
此处是断点
此处是正常业务内容
Listening for transport dt_socket at address: 5005

此时可以在日志第一行看到Listening for transport dt_socket at address: 5005证明远程调试接口配置成功。

本地使用IDEA对远程应用进行调试

在IDEA中打一个断点,开启debug

访问远程测试接口

注意点

  • 远程调试端口一定要跟应用的业务端口不一致,否则会因为端口冲突导致应用无法启动
  • 本地代码要与远程代码一致,否则调试过程会出现异常

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解读classpath读取resources目录下的文件

    解读classpath读取resources目录下的文件

    这篇文章主要介绍了解读classpath读取resources目录下的文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • idea2019版与maven3.6.2版本不兼容的解决方法

    idea2019版与maven3.6.2版本不兼容的解决方法

    这篇文章主要介绍了idea2019版与maven3.6.2版本不兼容的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 集合框架及背后的数据结构

    集合框架及背后的数据结构

    本文主要介绍了Java的集合框架Java Collection Framework,接口interface以及背后的数据结构,感兴趣的同学可以阅读参考
    2023-03-03
  • SpringBoot中实现文件上传、下载、删除功能的步骤

    SpringBoot中实现文件上传、下载、删除功能的步骤

    本文将详细介绍如何在 Spring Boot 中实现文件上传、下载、删除功能,采用的技术框架包括:Spring Boot 2.4.2、Spring MVC、MyBatis 3.5.6、Druid 数据源、JUnit 5 等,文中有详细的操作步骤和示例代码供大家参考,需要的朋友可以参考下
    2024-01-01
  • 自定义Spring Security的身份验证失败处理方法

    自定义Spring Security的身份验证失败处理方法

    在本篇文章里小编给大家整理了一篇关于自定义Spring Security的身份验证失败的处理方法,有需要的朋友们学习下。
    2019-05-05
  • Spring Boot Mybatis++ 2025详解

    Spring Boot Mybatis++ 2025详解

    文章介绍了三种基于注解SQL和查询接口的MyBatis使用方式,讨论了Entity和Example的区别,即Entity会更新所有字段,而Example仅更新非空字段,感兴趣的朋友一起看看吧
    2025-02-02
  • SpringBoot依赖及其作用分析

    SpringBoot依赖及其作用分析

    这篇文章主要介绍了SpringBoot依赖及其作用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • SpringBoot集成vue的开发解决方案

    SpringBoot集成vue的开发解决方案

    这篇文章主要介绍了SpringBoot集成vue的开发解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 揭秘SpringBoot!一分钟教你实现配置的动态神刷新

    揭秘SpringBoot!一分钟教你实现配置的动态神刷新

    在今天的指南中,我们将深入探索SpringBoot 动态刷新的强大功能,让你的应用保持最新鲜的状态,想象一下,无需重启,你的应用就能实时更新配置,是不是很酷?跟我一起,让我们揭开这项技术如何让开发变得更加灵活和高效的秘密吧!
    2024-03-03
  • 详解log4j.properties的简单配置和使用

    详解log4j.properties的简单配置和使用

    本篇文章主要介绍了详解log4j.properties的简单配置和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论