记一次DEBUG断点执行不了的“诡异”
- 前提:
- 这是一个二次开发的项目
- windows本地执行无误
- 打包后在linux下工程结构会不同(主要是lib目录会不同)
- 本人亲自部署,远程debug时代码行数对的上
- 工具:
idea2019.2 - 方式:
远程debug
错误描述
单步调试时,点了一下,不会到for这一行,且断点就像消失了一样。没有抛出任何异常。
思路
- 工具问题:怀疑没把断点打到远程服务器上,这个问题遇到过,通过断开连接,重新打断点,重启idea等等方法无果。
- 类没加载:但是这个jar包中已经有其他类都已经被加载了!怀疑在getInstance()方法中,有依赖的jar(bsh*.jar)没有被加载进来。(PS:类找不到不应该抛出异常java.lang.ClassNotFoundException吗???)
步骤
按照思路2来走,首先要知道到底在程序启动时加载了哪些类,根据以前解决类冲突时的经验,在启动参数中加入 -verbose:class 观察启动时加载什么类。
将输出重定向再查找该类:
发现真的没有加载到这个类,那么再看依赖到的jar包的情况:
观察到有一个异常类被加载。
那么问题就来了:为什么其他jar包都被加载,以及这个二次开发包中的其他类都能被加载呢?
探索的方式就是更改类的包名,将其放入其他可以被加载的类的包下!
结果就是它真的被加载到了,又可以愉快的DEBUG了!!
吐槽: 二次开发的坑点吧,一手遮遮掩掩,类加载时估计对包名还有限制,又咩有写入文档,坑人不浅。。