JAVA远程调试启动命令
基于Java的系统提测过程中总是会面临如何在研发端重现的问题。 若是情景简单,研发可以切换到SIT环境构造相关数据完成复现和单步调试,但更多的情况是情景复杂,难以重现或重现成本过高。研发花费大量经历在本地适配SIT环境然后才能单步调试寻找问题。
如果让SIT环境可以接收远程调试,是不是可以更好的解决这一难题?(来自阔爷的之前项目的经验~)所以有了这篇文字。
需求:
1. SIT环境支持远程调试
2. 不需要侵入式的代码修改。
3. 随时可以接入调试,不调试的时候不阻断程序运行。
实现途径:
方案#1 通过maven插件: (不满足需求第二条)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 </jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
方案#2 通过java自身的启动参数实现: (完美满足上述3条)
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -jar ./bin/www-boss-master-1.0.0-SNAPSHOT.jar
-XDebug 启用调试。
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport 用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM 是否需要作为调试服务器执行。
address=8000 调试服务器的端口号,客户端用来连接服务器的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM
结论:
目前在用方案#2
使用:
Eclipse, Ideal, Vscode 都支持, 配置remote的ip 和端口: 8000