Java遠程斷點調式 -Xdebug


前言:

  我們在開發的過程中,難免會遇到調用別人機器上的代碼,或者測試服務器上的代碼。再調用過程中,難免會用到斷點調式的功能。但是運行的不是本地的代碼怎么辦呢?

現在我們就來了解下Java遠程斷點調用。

需要:

  本地必須有源碼,才能進行遠程斷點。

 

一. 服務端啟動

#jdk1.7版本之前的命令

  #java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar

#1.7版本之后的命令

  #1) java -agentlib:jdwp=transport=dt_socket,address=9092,server=y,suspend=y -jar xxx.jar
  #2) java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9092-jar xxx.jar

我本地是jdk1.8,所以:

# nohup 末尾加&是后台運行 后邊是日志輸出路徑

nohup java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=9092,suspend=y -jar xxx.jar 1>/home/project/applogs/xxx-standout.log 2>&1 &

參數說明:

  # -Xdebug:通知JVM工作在debug模式下;
  # -Xnoagent 禁用默認sun.tools.debug調試器。
  # -Djava.compiler=NONE 禁止 JIT 編譯器的加載。
  # -Xrunjdwp:通知JVM使用(java debug wire protocol)來運行調試環境;加載JDWP的JPDA參考執行實例
  # transport:監聽Socket端口連接方式(也可以dt_shmem共享內存方式,但限於windows機器,並且服務提供端和調試端只能位於同一台機);
  # server:server=y表示當前是調試服務端,=n表示當前是調試客戶端
  # suspend:suspend=n表示啟動時不中斷,一般用於設置主動連接;suspend=y表示啟動時就進入調試模式,一般用於被動連接;

二. 客戶端調用

用idea連接遠程代碼

1.

 

2.

 

 

 3.

 

 

 4.啟動remote,當 console 窗口中打印出 “Connected to the target VM, address: 127.0.0.1:9092', transport: 'socket'”即表示鏈接成功

然后就可以訪問頁面,再本地代碼打斷點了

 

注意:

  1.服務端啟動的時候,address=prot 這個端口號和程序端口,不是一樣的。address這個端口號,必須要是沒有在使用的。

  2.服務端,不但要開放程序端口,而且要開放address端口。剛開始的時候,可以把防火牆關了練習。

  3.客戶端,調用的時候,調用的不是程序端口,而是address端口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM