You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:37:26