Eclipse仅在抛出异常时触发断点,正常代码行断点无效求助
解决Eclipse断点仅在异常时触发的问题
这种情况我之前碰到过好多次,大概率是源代码和运行时的二进制class文件不匹配导致的——简单说就是Eclipse没法把你设置断点的源码行,对应到实际执行的字节码上。结合你提到的项目结构(运行路径是C:\.....SmashDataServiceExternal\processor\bin,源码在另一个独立目录),给你几个具体的排查和解决步骤:
检查项目源码与二进制文件的关联配置
右键你的项目 →Properties→Java Build Path→ 切换到Source标签页:- 确认你的源码目录(
C:\.......\SmashDataProcessorExternal\...)已经被正确添加为Source Folder - 查看该源码目录对应的
Output folder是不是指向了运行时的C:\.....SmashDataServiceExternal\processor\bin?如果不是,点击Edit调整到这个路径 - 同时检查有没有
Excluded规则,别不小心把断点所在的源码文件或包排除了
- 确认你的源码目录(
清理并重新编译项目
旧的class文件没被覆盖是常见的坑:- 执行
Project→Clean...,选择你的项目,勾选Start a build immediately,让Eclipse彻底清理旧编译文件并重新构建 - 也可以手动删除
bin目录下的所有文件,再执行Project→Build Project,确保生成的class文件是完全匹配当前源码的
- 执行
确认调试配置的源码查找路径
打开Run→Debug Configurations,找到你正在使用的调试配置(比如Java Application类型):- 切换到
Source标签页,检查你的源码目录有没有被添加到查找路径中 - 如果没有,点击
Add...→ 选择File System,找到你的源码目录添加进去。这里要注意源码路径的层级必须和class文件的包结构对应,不然Eclipse找不到对应的行号
- 切换到
检查断点的有效性状态
留意断点的图标:如果断点变成灰色且带问号,说明Eclipse找不到对应的class文件,肯定不会触发。你可以右键断点 →Properties,查看Class字段是不是正确指向了断点所在类的全限定名,对应的源码路径是否正确借助异常断点辅助验证
既然异常断点能正常触发,说明调试器本身和程序的连接是正常的。在异常断点触发时,打开Variables视图,找到当前抛出异常的类,查看它的Source Location属性——如果这个路径不是你的源码目录,就坐实了源码和class文件的映射错误,回到前面的步骤修正即可
内容的提问来源于stack exchange,提问作者Richard Liu
相关产品推荐
相关产品推荐

