天天看点

SpringBoot 远程调试Jar包详细过程

在现实开发过程中,生产环境永远比开发环境复杂,如果开发环境无法还原现场问题,就需要开发人员远程调试现场问题,而且有些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包中这样执行是没有问题的)

SpringBoot 远程调试Jar包详细过程

1、开发工具 idea

2、项目框架 springboot

3、项目管理工具 maven

SpringBoot 远程调试Jar包详细过程

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

SpringBoot 远程调试Jar包详细过程

在jar包所在路径下打开powershell窗口,输入命令:

SpringBoot 远程调试Jar包详细过程

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

SpringBoot 远程调试Jar包详细过程

可以在本地测试一下,在浏览器调用一个接口看是否能有返回内容。

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

参数说明:

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

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

transport:监听Socket端口连接方式(也可以使用dt_shmem共享内存方式,但限于Windows机器,并且服务提供端和调试端只能位于同一台机);

server:server=y 表示当前调试服务器,=n表示当前的是调试客户端

suspend:suspend=n表示启动时不中断,一般用于设置主动连接;suspend=y 表示启动时就进入调试模式,一般用于被动连接。

(注意:如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口,程序才真正开始执行。有时候程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种情况就可以使用suspend参数)

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

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

SpringBoot 远程调试Jar包详细过程

现在在idea中调试代码就相当于在调试jar包里的代码。

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

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