IntelliJ调试SBT应用失败:断点无法触发
解决IntelliJ调试SBT应用断点不触发的问题
你的问题核心在于:sbt -jvm-debug 5005 是给SBT自身的JVM进程开启了调试端口,但执行run命令时,应用是在一个独立的子JVM进程中启动的,这个子进程并没有绑定调试端口,所以IntelliJ的调试器无法关联到应用进程,断点自然不会触发。
下面是修正后的操作方案:
方法一:临时给run任务添加调试参数
- 直接在终端启动SBT,无需附加
-jvm-debug参数:sbt - 在SBT控制台中,执行带调试参数的启动命令:
也可以一次性组合执行:set javaOptions += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" runsbt -DjavaOptions="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" run - 在IntelliJ中配置远程调试:
- 打开
Run/Debug Configurations→ 点击+号 → 选择Remote JVM Debug - 将端口设置为
5005,其余保持默认配置
- 打开
- 点击IntelliJ的调试按钮,调试器会自动连接到应用进程,断点即可正常触发。
方法二:修改配置文件实现永久生效
如果不想每次启动都重复输入参数,可以修改项目根目录下的build.sbt,或者全局配置文件~/.sbt/1.0/global.sbt,添加以下内容:
fork in run := true javaOptions in run += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
之后只需正常启动SBT并执行run命令,再用IntelliJ的远程调试配置连接即可。
额外提示
- 如果将参数中的
suspend=n改为suspend=y,应用会在启动时暂停,等待调试器连接后再继续运行,适合调试应用启动阶段的代码。 - 确保IntelliJ远程调试配置的
Host为localhost(同一机器运行时),且端口与命令中的address值完全一致。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

