基于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 并增加到supervisorctl.conf 的配置文件

 

使用: 

 Eclipse, Ideal, Vscode 都支持, 配置remote的ip 和端口: 8000