Eclipse IDE 2020-03调试器异常问题求助
针对你的OSGi调试问题的排查与解决建议
看起来你在Eclipse 2020-03里调试OSGi插件时遇到了一串关联问题,我来一步步帮你梳理排查方向:
一、Class.getResource()参数显示null的问题
回到最初的资源读取问题,大概率是资源没有被正确打包进bundle:
- 确认资源位置与build配置:把
test.cfg放在项目的src目录(或者专门的resources目录),然后打开项目的build.properties,确保bin.includes里包含这个文件,比如:
只有这样,Eclipse打包bundle时才会把资源文件放进classpath根目录,bin.includes = ., META-INF/, test.cfggetResourceAsStream("/test.cfg")才能找到它。 - 尝试类加载器的另一种写法:有时候用类加载器直接读取会更可靠,替换成:
注意这里路径不要加开头的InputStream in = getClass().getClassLoader().getResourceAsStream("test.cfg");/,因为类加载器的getResource是从classpath根开始查找的。
二、测试项目日志不显示、断点无响应的问题
这个问题看起来和调试配置残留、bundle加载错误直接相关:
- 彻底检查调试配置:
打开Run/Debug Configurations,找到你的OSGi Framework配置:- 在
Bundles标签页,一定要选择Selected Bundles,然后只添加你的test.myapp.core和核心依赖org.eclipse.osgi(OSGi框架本身),其他无关bundle全部移除——这就是为什么ss命令显示很多bundle的原因,你可能不小心选了默认的全量bundle。 - 在
Main标签页,勾选Clear the configuration area before launching,这样每次启动都会清空旧的配置缓存,避免加载旧版本的bundle。 - 在
Debug标签页,确认Enable debugging是勾选状态,端口没有被占用。
- 在
- 解决日志不显示的问题:
你用的是java.util.Logger,默认情况下它的日志输出可能没有定向到控制台。可以在调试配置的Arguments标签页的VM arguments里添加:
或者简单点,直接在代码里临时设置日志级别:-Djava.util.logging.config.file=path/to/your/logging.properties
另外,不要在Activator的构造函数里打日志——OSGi加载bundle时构造函数会被调用,但此时日志系统可能还没初始化完成,把日志移到logger.setLevel(Level.ALL); ConsoleHandler handler = new ConsoleHandler(); handler.setLevel(Level.ALL); logger.addHandler(handler);start方法里更可靠。 - 断点无响应的排查:
检查项目的编译设置:右键项目 > Properties > Java Compiler > Classfile Generation,确保勾选了Add line number attributes to generated class files和Add variable attributes to generated class files——没有这些属性,调试器无法定位断点位置。 - 清理旧bundle残留:
打开Eclipse的Plug-ins视图(Window > Show View > Other > Plug-ins),找到test.myapp.core,右键选择Uninstall,然后重启调试配置,强制加载最新的项目编译版本。
三、终极清理方案
如果上面的步骤都无效,试试彻底清理缓存:
- 关闭Eclipse。
- 删除工作区
.metadata目录下的.plugins/org.eclipse.pde.core和.plugins/org.eclipse.debug.core文件夹(这两个是PDE调试和插件管理的缓存)。 - 重新打开Eclipse,重新创建调试配置,再尝试启动。
内容的提问来源于stack exchange,提问作者keesp
相关产品推荐
相关产品推荐

