SpringBoot 远程调试Jar包详细过程

2022年05月13日 阅读数:2
这篇文章主要向大家介绍SpringBoot 远程调试Jar包详细过程,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。


为何须要对远程jar包进行debug

在现实开发过程当中,生产环境永远比开发环境复杂,若是开发环境没法还原现场问题,就须要开发人员远程调试现场问题,并且有些bug运行在服务器上,隐藏较深,经过日志也排查不出问题,因此能够采用对 jar 包进行远程调试来解决问题。java

采坑经历

最近对一版SSM的旧项目进行了重构,采用spring cloud微服务的形式以分布式开发的模式开发的功能,其中用到了fastDFS,在SSM项目里Fastdfs本地和构建完以后的项目使用过程当中都没有问题,可是在spring boot框架下本地虽然没问题,可是构建完以后调用下载文件的接口的时候提示找不到fastDFS的配置文件。spring

缘由是因为SSM和SpringBoot项目打包构建完以后的形式不同,SSM构建完是war 包,而SpringBoot构建完是jar包,jar包在运行过程当中有些文件不会展开去执行,因此会出现找不到fastDFS配置文件的错误。shell

通过在jar包中不断调试,发现代码走到这里发生了差异,读取文件路径以classLoader().getResourceAsStream(filePath)读取的时候会自动给文件路径加上classPath,因此致使文件路径错误,我在传入的时候文件路径不加classpath前缀就能够了。问题成功解决!(可是在war包中这样执行是没有问题的)浏览器

SpringBoot 远程调试Jar包详细过程_spring

private static final String URL="fast_client.conf";
// private static final String URL="classpath:fast_client.conf";

环境介绍

一、开发工具 ideaspringboot

二、项目框架 springboot服务器

三、项目管理工具 maven框架

程序打包

SpringBoot 远程调试Jar包详细过程_spring_02

从控制台找到jar包的生成路径:socket

SpringBoot 远程调试Jar包详细过程_jar包_03在jar包所在路径下打开powershell窗口,输入命令:maven

java -jar .\itoo-exam-question.jar --server.port=8888

SpringBoot 远程调试Jar包详细过程_spring_04

看到下面的界面说明打包成功,jar包没有问题:分布式

SpringBoot 远程调试Jar包详细过程_jar_05能够在本地测试一下,在浏览器调用一个接口看是否能有返回内容。

http://127.0.0.1:8013/datum/downExcel/1072112901400514565/%E5%A4%9A%E9%80%89%E9%A2%98

开始调试

SpringBoot 远程调试Jar包详细过程_jar包_06SpringBoot 远程调试Jar包详细过程_spring_07

参数说明:

Host:输入服务器地址(或电脑ip地址)

Port:客户端请求链接的端口号(自定义)


  • transport:监听Socket端口链接方式(也可使用dt_shmem共享内存方式,但限于Windows机器,而且服务提供端和调试端只能位于同一台机);
  • server:server=y 表示当前调试服务器,=n表示当前的是调试客户端
  • suspend:suspend=n表示启动时不中断,通常用于设置主动链接;suspend=y 表示启动时就进入调试模式,通常用于被动链接。
    (注意:若是设置为y,它会阻塞程序运行,直到有客户端链接到对应的监听端口,程序才真正开始执行。有时候程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种状况就可使用suspend参数)

一、在powershell中输入命令启动jar包

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888 .\itoo-exam-question.jar

二、jar包启动完成后在idea中启动刚才建立的remote loca-jar,出现下面的界面说明启动成功。

SpringBoot 远程调试Jar包详细过程_jar包_08

如今在idea中调试代码就至关于在调试jar包里的代码。

三、能够在powershell中看到打出的日志信息,如今就能够在idea中调试jar里的代码去排查问题了。

SpringBoot 远程调试Jar包详细过程_jar_09

SpringBoot 远程调试Jar包详细过程_jar_10