Spring Tool Suite (STS 3.9.6)调试报错求助:缺失行号属性导致无法安装断点
解决STS 3.9.6中CGLIB代理类无法安装断点的问题
嗨,Chaitanya,我之前调试Spring项目时也碰到过一模一样的问题,别着急,这是因为Spring通过CGLIB生成的动态代理类缺失行号属性导致的,咱们一步步来搞定它:
1. 确保项目编译时生成行号信息
首先检查STS的编译器设置,这是最关键的一步:
- 右键你的项目 → 选择「Properties」→ 打开「Java Compiler」选项卡
- 找到并勾选 "Add line number attributes to generated class files (used by debugger)"
- 点击「Apply and Close」保存设置
如果你的项目是用Maven或Gradle构建的,还要确保构建工具的配置也开启了调试信息:
Maven项目(修改pom.xml)
在<build>标签下添加编译器插件配置:
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <debug>true</debug> <debuglevel>lines,vars,source</debuglevel> </configuration> </plugin> </plugins>
Gradle项目(修改build.gradle)
添加Java编译任务的调试配置:
tasks.withType(JavaCompile) { options.debug = true options.debugOptions.debugLevel = "lines,vars,source" }
2. 清理并重新构建项目
设置完成后,需要让项目重新生成带行号的类文件:
- 点击STS菜单栏的「Project」→「Clean...」,选择你的项目进行清理
- 如果是Maven项目:右键项目 →「Maven」→「Update Project...」,勾选「Force Update of Snapshots/Releases」后确认
- 如果是Gradle项目:右键项目 →「Gradle」→「Refresh Gradle Project」
- 最后重启STS,再尝试添加断点调试
3. 额外检查:Spring代理配置(可选)
如果上述步骤后还是有问题,可以尝试强制Spring使用CGLIB代理(确保代理类能继承原类的调试信息):
在application.properties(或application.yml)中添加:
spring.aop.proxy-target-class=true
问题原因说明
Spring在处理AOP、@Configuration等场景时,会用CGLIB动态生成目标类的代理子类。如果原项目编译时没有生成行号属性,这些动态生成的代理类也会缺失行号信息,导致调试器无法识别断点位置,就会出现你看到的错误提示。
内容的提问来源于stack exchange,提问作者Chay
相关产品推荐
相关产品推荐

