基於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