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

1、开发工具 idea
2、项目框架 springboot
3、项目管理工具 maven
从控制台找到jar包的生成路径:
在jar包所在路径下打开powershell窗口,输入命令:
看到下面的界面说明打包成功,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,出现下面的界面说明启动成功。
现在在idea中调试代码就相当于在调试jar包里的代码。
3、可以在powershell中看到打出的日志信息,现在就可以在idea中调试jar里的代码去排查问题了。