如何强制Eclipse编译Java类时保留准确行号以正常调试?
解决Eclipse编译类行号与原代码不匹配的调试问题
当然可以搞定这个头疼的调试问题!我之前也碰到过类似的情况,就是因为编译时为了提速关闭了调试信息,导致Eclipse没法准确对应原代码和字节码的行号。通过调整编译设置重新生成带完整调试信息的类文件,就能让断点恢复正常,具体操作步骤如下:
1. 调整项目的Java Compiler配置
- 右键你的项目,选择「Properties」(属性)
- 找到「Java Compiler」选项,先勾选「Enable project specific settings」(启用项目特定设置),避免继承全局配置里的不合理设置
- 展开「Classfile Generation」部分,把下面三个选项都勾上:
Add line number attributes to generated class files(给生成的类文件添加行号属性)Add local variable attributes to generated class files(添加局部变量属性)Add source file name to generated class files(添加源文件名信息)
- 重点检查「Additional command line parameters」(额外命令行参数),如果里面有
-g:none这类关闭调试信息的参数,直接删掉或者改成-g(保留所有调试信息)
2. 清理旧编译文件并重新编译
- 先清理项目:点击菜单栏的「Project」→「Clean」,选中你的项目后点「OK」,这会把之前编译的有问题的类文件全部删掉
- 然后重新编译:右键项目选择「Build Project」,或者打开「Project」→「Build Automatically」让Eclipse自动完成编译
3. 验证断点是否恢复正常
编译完成后回到原代码第691行(也就是String METHODNAME = "executeAction";那一行),直接设置断点试试——现在应该能精准对应到原代码行,不会再跳到599行,空白行也能正常设置断点了。
补充一点小说明
你推测的原因完全正确:当编译时省略了调试信息,Eclipse调试时只能通过不完整的字节码信息逆向映射行号,自然会出现错位。虽然保留完整调试信息会让类文件稍微大一点,但对本地调试来说这点代价完全值得,毕竟调试效率能提升太多。
内容的提问来源于stack exchange,提问作者jros
相关产品推荐
相关产品推荐

