记一次因类未加载导致DEBUG断点执行不了的“诡异”

简介: 记一次因类未加载导致DEBUG断点执行不了的“诡异”

记一次DEBUG断点执行不了的“诡异”

  • 前提:
  1. 这是一个二次开发的项目
  2. windows本地执行无误
  3. 打包后在linux下工程结构会不同(主要是lib目录会不同)
  4. 本人亲自部署,远程debug时代码行数对的上
  • 工具:
    idea2019.2
  • 方式:
    远程debug

错误描述

单步调试时,点了一下,不会到for这一行,且断点就像消失了一样。没有抛出任何异常。

思路

  1. 工具问题:怀疑没把断点打到远程服务器上,这个问题遇到过,通过断开连接,重新打断点,重启idea等等方法无果。
  2. 类没加载:但是这个jar包中已经有其他类都已经被加载了!怀疑在getInstance()方法中,有依赖的jar(bsh*.jar)没有被加载进来。(PS:类找不到不应该抛出异常java.lang.ClassNotFoundException吗???)

步骤

按照思路2来走,首先要知道到底在程序启动时加载了哪些类,根据以前解决类冲突时的经验,在启动参数中加入 -verbose:class 观察启动时加载什么类。

将输出重定向再查找该类:

发现真的没有加载到这个类,那么再看依赖到的jar包的情况:

观察到有一个异常类被加载。

那么问题就来了:为什么其他jar包都被加载,以及这个二次开发包中的其他类都能被加载呢?

探索的方式就是更改类的包名,将其放入其他可以被加载的类的包下!

结果就是它真的被加载到了,又可以愉快的DEBUG了!!

吐槽: 二次开发的坑点吧,一手遮遮掩掩,类加载时估计对包名还有限制,又咩有写入文档,坑人不浅。。

目录
相关文章
关于 qt程序退出出现“已停止工作”程序奔溃问题 的解决方法
关于 qt程序退出出现“已停止工作”程序奔溃问题 的解决方法
关于 qt程序退出出现“已停止工作”程序奔溃问题 的解决方法
|
编译器 C++
C/C++ - Codeblcoks 调试断点不停解决办法【绝对有效】
C/C++ - Codeblcoks 调试断点不停解决办法【绝对有效】
444 0
Qt [GC9-5]:给我的程序添加启动画面(触发编译警告)
Qt [GC9-5]:给我的程序添加启动画面(触发编译警告)
164 0
Qt [GC9-5]:给我的程序添加启动画面(触发编译警告)
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
505 0