如何修改IntelliJ Spring Boot远程调试参数解决WSL2环境调试卡住问题
在IntelliJ中调试类型为"Spring Boot"的运行配置时,JVM启动时默认携带如下命令行参数:-agentlib:jdwp=transport=dt_socket,address=*:12345,suspend=y,server=y
问题详情
在IntelliJ和WSL2环境中运行基于Maven的Spring Boot应用,尝试调试Spring Boot类型的运行配置时,JVM始终卡在Listening for transport dt_socket at address: 12345这一行,该问题由WSL2运行在虚拟机中、IntelliJ运行在Windows系统的环境差异导致。
临时解决方案是在JVM选项中添加修改后的-agentlib命令行参数,启动运行配置后再手动挂载调试器,仅将参数中的address=*:12345修改为address=12345即可。该修改会让调试代理监听localhost:12345,调试器也会连接该地址,由于Windows和WSL2默认共享localhost,因此该方案可以正常生效。
解决方案来源
通过查看IntelliJ运行应用时实际使用的命令行参数发现,不同项目的默认参数存在差异,部分项目默认是address=*:12345,部分则是address=12345,因此可以通过修改该参数解决问题。
2021-09-18 18:45 更新
经过排查,问题实际与IPv6和IPv4的协议差异有关,上述临时方案会让JVM监听127.0.0.1:12345,而未修改参数时JVM默认使用IPv6地址。
2021-09-19 14:00 更新
目前可以采用更简便的解决方案:在命令行参数中添加-Djava.net.preferIPv4Stack=true即可让JVM优先使用IPv4协议,注意不要混淆preferIPv4Stack和preferIPv6Stack两个参数。
内容的提问来源于stack exchange,提问作者Yevgeniy

