IntelliJ IDEA | 調試遠程 JAVA 服務

1 概述

原理:本機和遠程主機的兩個 VM 之間使用 Debug 協議通過 Socket 通信,傳遞調試指令和調試信息

被調試程序的遠程虛擬機:作爲 Debug 服務端,監聽 Debug 調試指令。jdwp是Java Debug Wire Protocol的縮寫

調試程序的本地虛擬機:IDEA 中配置的 Remote Server,指定 Debug 服務器的Host:Port,以供 Debug 客戶端程序連接。

2 設置

2.1 IDEA 中指定 Debug 服務器

  • 點擊主窗口菜單 Run / Edit Configurations,打開“Run/Debug Configurations”窗口;
  • 點擊工具欄上的“+”按鈕,下拉菜單中選擇“Remote”;
  • 設置 Host 爲遠程服務器的域名或IP,保持 Port=5005 無需調整;
  • 複製命令行參數,形如 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

2.2 遠程服務中開啓 Debug 服務

2.2.1 對於 SpringBoot

命令行添加選項,並重啓:

## 注意新參數必須在 -jar 之前
jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar test.jar

2.2.2 對於 Tomcat

啓動腳本中添加選項,並重啓:

## sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

2.3 遠程服務器防火牆端口放行

### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
### 重啓生效: sudo systemctl restart iptables

3 開始調試

  • 要求:雙方代碼一致,否則遠程調試無法啓動;
  • 本地啓動剛剛配置的 Remote Server,正常時會看到日誌: Connected to the target VM, address: 'xxx:5005', transport: 'socket'
  • 本地 IDEA 代碼中設置斷點
  • 瀏覽器或手機 HTTP 訪問服務器
  • IDEA 即可在斷點暫停並跟蹤

4 關閉調試

服務器上多開放個端口是不安全的,調試完畢後可恢復防火牆設置。
而 Java 服務器開啓 Debug 服務器的功能可以保留,以便之後再次調試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章