本地打包时的一些疑问

Posted by Futari on 2024-05-09
Estimated Reading Time 2 Minutes
Words 662 In Total
Viewed Times

注意一点,debug的非本工程的代码,也就是jar包中的代码,有可能不是最新的,所以有时候开发仓库没有最新包也没人打的时候,可以打本地的,切换到对应工程拉最新代码,install即可。

所以由于可能具有不一致性,所以报错如果没有蓝标,即非本工程代码,那么代码行数即使从IDEA中点进去,和实际的执行行数的内容也是对不上的。

问题

可是本地启动的工程,引本地的包应该也没错啊?为什么对不上呢?

答案:

我知道了,是因为jar包中的类都是字节码class文件,而idea加载出来的都是经过将class反编译显示出来的代码,所以行数等等,逻辑都会发生变化,所以不再准确,而报错给出的行数,是源代码执行的行数的日志

所以你debug jar包代码的时候,和行数是没有关系的,只是拦截到你断点的位置,如果你在此时查看IDEA运行的行数,你会发现实际源代码运行行数和class文件运行(你debug的行数)是不一致的

今天又遇到了这个问题,tail -f查看线上的一体化包的日志时,不确定报错行数是否准确的了,因为又联想到入口和报错处是不是引用jar的关系,陷入了错误逻辑,抓住一个点:堆栈打印的代码行一定源代码的代码行

不对应的情况是因为用idea查看时只能看反编译的class,展示出来的不是源代码,所以有差异!

第66行:下图仅方法调用,所以直接确定是Bean为null

使用arthas时,打印的错误信息也是Java堆栈打印的,所以一定是源代码行,和编译器,编译后优化都无关。

:::success
错误点:

1.刚开始不更新代码,从错误的代码行看了半天

2.更新之后不确定是否是Bean没注入,认为Bean没注入就一定启动不起来

:::

:::success
为什么后来刷了一下MVN,重启一下就好了?

原因是和Maven没关系,在启动的时候拉的代码,变量的修改不能热编译,所以更新下代码就能复现bug了

:::

最后搜索SpringUtils可以获取Bean,Autowired注入却为null的情况,得出结论:

这个调用是某地方通过new出来的实例对象的调用,所以和Spring-Bean脱离了


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !