SpringBoot 远程调试Jar包详细过程

为什么需要对远程jar包进行debug

在现实开发过程中,现场环境永远比开发环境复杂,如果开发环境无法还原现场问题,就需要开发人员远程调试现场问题,而且有些bug运行在服务器上,隐藏较深,通过日志也排查不出问题,所以可以采用对 jar 包进行远程调试来解决问题。

采坑经历

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

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

经过在jar包中不断调试,发现代码走到这里发生了差别,读取文件路径以classLoader().getResourceAsStream(filePath)读取的时候会自动给文件路径加上classPath,所以导致文件路径错误,我在传入的时候文件路径不加classpath前缀就可以了。问题成功解决!(但是在war包中这样执行是没有问题的)
在这里插入图片描述

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

环境介绍

1、开发工具 idea
2、项目框架 springboot
3、项目管理工具 maven

程序打包

在这里插入图片描述
从控制台找到jar包的生成路径:
在这里插入图片描述在jar包所在路径下打开powershell窗口,输入命令:

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

在这里插入图片描述
看到下面的界面说明打包成功,jar包没有问题:
在这里插入图片描述可以在本地测试一下,在浏览器调用一个接口看是否能有返回内容。

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

开始调试

在这里插入图片描述在这里插入图片描述
参数说明:

Host:输入服务器地址(或电脑ip地址)
Port:客户端请求连接的端口号(自定义)

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

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

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

2、jar包启动完成后在idea中启动刚才创建的remote loca-jar,出现下面的界面说明启动成功。
在这里插入图片描述
现在在idea中调试代码就相当于在调试jar包里的代码。

3、可以在powershell中看到打出的日志信息,现在就可以在idea中调试jar里的代码去排查问题了。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Sophia_0331/article/details/107136498