1. 程式人生 > 實用技巧 >IDEA 遠端除錯

IDEA 遠端除錯

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 伺服器的功能可以保留,以便之後再次除錯。

轉自:https://blog.csdn.net/kefengwang/article/details/81213014