如何在AWS Cloud9中为Spring Boot应用挂载内置调试器?
AWS Cloud9 内置调试器对接Shell启动的Spring Boot实操方案
不用切换到Runner: Auto,也不用依赖mvnDebug的独立调试模式,按以下步骤配置即可直接使用IDE内置调试器的断点、变量查看、单步执行等全部功能:
- 修改你已创建的shell command类型运行配置的启动命令,替换为如下内容:
mvn spring-boot:run -f pom.xml -DlogPathProperty=/path/to/log/directory -Dspring-boot.run.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5858"
参数说明:
- 5858是AWS Cloud9内置调试器默认适配的Java调试端口,不需要额外修改调试器的端口配置
suspend=n表示应用启动时不等待调试器连接,正常启动;如果需要调试应用启动阶段的初始化逻辑,把该值改为suspend=y即可,应用会暂停在启动入口,等调试器连接后再继续执行
- 保存运行配置后,点击常规运行按钮启动应用,当控制台输出
Listening for transport dt_socket at address: 5858时,说明调试端口已正常开启
- 保存运行配置后,点击常规运行按钮启动应用,当控制台输出
- 打开Cloud9调试面板,调试目标选择「Attach to Runner」(部分老版本显示为「Attach to Local Process」),语言选择Java,直接点击连接按钮即可挂载内置调试器,不需要额外配置其他参数
常见问题处理
- 如果断点命中失败:在上述启动命令末尾追加
-Dspring-boot.run.fork=false参数即可。部分版本的Spring Boot Maven插件会fork独立进程运行业务代码,导致JDWP参数没有加载到实际运行业务的JVM上,关闭fork后Maven和业务代码运行在同一进程,调试器可正常识别代码断点。 - 不要直接替换
mvn为mvnDebug启动:mvnDebug默认开启8000调试端口,且调试代理挂载在Maven构建进程而非Spring Boot业务进程上,即使手动修改调试器端口连接,断点也只会命中Maven的构建逻辑,无法触发业务代码的断点。 - 如果提示端口连接失败:检查是否有其他进程占用了5858端口,可通过
lsof -i:5858命令查看占用进程,杀掉后重启应用即可。
内容的提问来源于stack exchange,提问作者J. Dufresne
相关产品推荐
相关产品推荐

