最典型调试失灵是jvm未启用调试模式或launch.json配置错误;需检查request类型、jvm参数、java扩展、项目结构、源码路径、编译选项及模块配置。

断点加了但程序直接跑过,不中断
这是最典型的调试失灵现象,根本原因通常是 JVM 启动时没启用调试模式,或者 VSCode 的 launch.json 配置没对上实际运行方式。
检查点优先级如下:
-
launch.json中的request必须是"launch"(本地启动)或"attach"(附加到已有进程),不能写成"run"或留空 - 如果用 Maven 运行(如
mvn spring-boot:run),默认不开启 JDWP;必须显式加 JVM 参数:-Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" - VSCode 的 Java 扩展(Extension Pack for Java)必须已安装且启用,否则
java.debug功能不会加载 - 确认项目根目录下有
.classpath或pom.xml,Java 扩展靠它识别为 Java 项目——没有则断点注册失败,控制台也不会报错,只是静默忽略
“Source not found” 错误:调试时看不到源码
VSCode 提示 Source not found,本质是调试器找到了 class 文件,但找不到对应的 .java 源文件路径。常见于依赖库、Spring Boot 内嵌 jar、或模块路径混乱的多模块项目。
关键解决动作:
- 对 Maven 项目,确保已执行
mvn compile或mvn generate-sources,否则target/classes下可能缺 class,或注解处理器生成的源码未就位 - 如果是 Spring Boot 的
spring-boot-devtools,它会重载类但不更新源码映射,临时方案:在launch.json的vmArgs中加-Dspring.devtools.restart.enabled=false - 遇到第三方 jar(如
logback-classic-1.4.14.jar)提示无源码,手动下载对应版本的-sources.jar,然后在 VSCode 中右键该 jar →Attach Source...,指向解压后的 src 目录 - 多模块 Maven 项目中,若子模块未被主 pom 正确聚合,VSCode 可能只识别部分模块——检查
workspaceFolder是否设为顶层父 pom 所在目录
launch.json 关键字段与典型配置差异
同一份代码,在不同运行方式下(直接运行 main、Maven、Spring Boot、JUnit)需要完全不同的 launch.json 结构,字段含义容易混淆。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
重点区分:
-
mainClass:仅用于request: "launch",值必须是完整类名(如"com.example.App"),不能是包名或带.java后缀 -
projectName:仅在多模块项目中需要,值来自pom.xml的<artifactid></artifactid>,填错会导致 classpath 缺失 -
classPaths和modulePaths:JDK 9+ 模块化项目必须用modulePaths,传统项目用classPaths;混用会导致NoClassDefFoundError在调试时才暴露 -
env与envFile:环境变量建议统一走envFile(如.env.debug),避免在 JSON 里硬编码敏感值或路径空格引发解析失败
调试器连上了,但变量显示 <not available></not>
这通常不是配置问题,而是编译产物缺失调试信息,或 JVM 优化干扰了调试符号读取。
实操检查项:
- 确认
javac编译时加了-g参数(VSCode Java 扩展默认开启,但若手动用命令行编译过,需自查) - Maven 项目检查
pom.xml中maven-compiler-plugin是否设置了<debug>true</debug>,否则target/classes下的 class 不含局部变量表 - Spring Boot 2.7+ 默认启用 JVM 优化(
-XX:TieredStopAtLevel=1),可能导致内联方法无法查看变量;可在launch.json的vmArgs中追加-XX:-OmitStackTraceInFastThrow -XX:TieredStopAtLevel=0 - 若使用 Lombok,确保安装了
Lombok Annotations Support for VS Code插件,否则@Data生成的 getter/setter 在调试时无法展开字段
断点和源码问题背后,往往不是单点故障,而是 classpath、编译选项、JVM 参数、扩展状态四者耦合的结果。改一个地方前,先用 java -verbose:class -jar your-app.jar 看类实际从哪加载,比反复重启调试器更省时间。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










