Java遠程調試的原理

原文鏈接:https://my.oschina.net/u/3448620/blog/1525248

JDWP(Java Debug Wire Protocol)

兩個VM之間通過debug協議進行通信,然後以達到遠程調試的目的。兩者之間可以通過socket進行通信。

其中,調試的程序常常被稱爲debugger, 而被調試的程序稱爲 debuggee。

 

應用場景

當你的開發環境在Window,又在遠端linux Server或者移動平臺上運行Java應用程序,Java提供了一系列的接口和協議讓本地Java文件於遠端JVM建立聯繫和通信。

 

Java 調試器架構

從下往上讀架構,大致可以解讀爲: 用於調試的程序使用UI,通過Protocol,調用遠端JVM進程。

實質還是JVM,只要確保本地Java 源代碼與目標應用程序一致,本地的Java源碼就可以用socket連接到遠端的JVM,進而執行調試。

 

在Socket Attach模式下,本地只需要有源碼,Java應用程序根本不用啓動。

Socket Attach方式:

 

實際操作

首先被debug程序的虛擬機在啓動時要開啓debug模式,啓動debug監聽程序。

 

在啓動程序時,將以下參數選項添加到自定義的命令行中,程序就會以支持RemoteDeubg的方式啓動。

wrapper.java.additional.1=-Xdebug
wrapper.java.additional.2=-Xrunjdwp:transport=dt_socket,server=y,address=7899,suspend=n

 

DEBUG選項參數的意思

-XDebug 啓用調試;
-Xrunjdwp 加載JDWP的JPDA參考執行實例;
transport 用於在調試程序和VM使用的進程之間通訊;
dt_socket 套接字傳輸;
server=y/n VM是否需要作爲調試服務器執行;
address=7899 調試服務器監聽的端口號;
suspend=y/n 是否在調試客戶端建立連接之後啓動 VM 。

 

然後用一個debug客戶端去debug遠程的程序,如:用Eclipse自帶的debug客戶端,填寫運行被debug程序的虛擬機監聽的端口號和地址,選擇connect方式爲attach。

在程序中打好斷點,打開Eclipse配置

Run-->Debug Configurations…-->Remote java Application-->右鍵New-->填寫Host和Port(例如,Host:10.75.0.103,Port:7899)-->Debug

 

注意,如果 Java 源代碼與目標應用程序不匹配,調試特性將不能正常工作。

選擇 Allow termination of remote VM 選項 可以在應用程序調試期間終止連接

這樣遠程調試連接上之後,就可以像在本地調試Java程序一樣來調試遠端的Java應用程序。

 

 

IDE快捷鍵

Eclipse debug快捷鍵

F5 Step into

F6 Step over

F7 Step out

F8 continue to the next breakpoint

 

Intellij debug的快捷鍵

F7,Step into

F8,Step over

Shift+F8, Step out

Alt+F9,運行至光標處

F9,恢復程序

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