1. 程式人生 > 程式設計 >java進行遠端部署與除錯及原理詳解

java進行遠端部署與除錯及原理詳解

這篇文章主要介紹了java進行遠端部署與除錯及原理詳解,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

遠端除錯,特別是當你在本地開發的時候,你需要除錯伺服器上的程式時,遠端除錯就顯得非常有用。

JAVA 支援除錯功能,本身提供了一個簡單的除錯工具JDB,支援設定斷點及執行緒級的除錯同時,不同的JVM通過介面的協議聯絡,本地的Java檔案在遠端JVM建立聯絡和通訊。此篇是Intellij IDEA遠端除錯的教程彙總和原理解釋,知其然而又知其所以然。遠端部署點選

1.本機Intellij IDEA遠端除錯配置

1,開啟Inteliij IDEA,頂部選單欄選擇Run-> Edit Configurations,進入下圖的執行/除錯配置介面。

2,點選左上角'+'號,選擇Remote。分別填寫右側三個紅框中的引數:Name,Host(想要指定的遠端除錯埠)。

3,點選介面右下角應用按鈕即可。

2.伺服器端開啟除錯模式,增加JVM啟動引數,以支援遠端除錯

伺服器端的catalina.sh檔案,在Tomcat的安裝目錄下,複製到本地,進行編輯,在第一行新增引數配置如下,完成後貼上回去。

文字:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8089"

配置新增之後,重啟tomcat即可生效(shutdown.sh /startup.sh)。到此,開始遠端除錯。

3.Intellij IDEA啟動遠端呼叫

最後,開啟IDEA,程式上打上斷點,執行模式選遠端,點選執行。呼叫伺服器端執行的系統程式,系統自動進入斷點

4.為什麼可以進行遠端除錯,背後的原理是什麼?

首先,瞭解下的Java程式的執行過程- 分為以下幾個步驟:Java的檔案 - -編譯生成的類檔案(class檔案) - - JVM載入類檔案 - - JVM執行類位元組碼檔案 - - JVM翻譯器翻譯成各個機器認識的不同的機器碼。

遠端除錯原理

眾所周知,Java 程式是執行在Java 虛擬機器(JVM )上的,具有良好跨平臺性,是因為Java程式統一以位元組碼的形式在JVM中執行,不同平臺的虛擬機器都統一使用這種相同的程式儲存格式。因為都是類位元組碼檔案,只要原生代碼和遠端伺服器上的類檔案相同,兩個JVM通過除錯協議進行通訊(例如通過插座在同一個埠進行通訊),另外需要注意的時,被除錯的伺服器需要開啟除錯模式,伺服器端的程式碼和原生代碼必須保持一致,則會造成斷點無法進入的問題。

<code>Java</code>的偵錯程式架構

1.這個架構其實質還是JVM,只要確保本地的Java的原始碼與目標應用程式一致,本地的Java的的的的原始碼就可以用插座連線到遠端的JVM,進而執行除錯。因此,在這種插座連線模式(下文介紹)下,本地只需要有原始碼,本地的Java的應用程式根本不用啟動。

傳輸方式,預設為Socket ;

套接字:MACOS,Linux的系統使用此種傳輸方式;

共享記憶體:WINDOWS系統使用此種傳輸方式。

除錯模式:預設為Attach ;

  Attach :此種模式下,除錯服務端(被除錯遠端執行的機器)啟動一個埠等待我們(除錯客戶端)去連線;

  Socket :此種模式下,是我們(除錯客戶端)去監聽一個埠,當除錯服務端準備好了,就會進行連線。

配置屬性說明補充


文字:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8089"

2.各引數解釋:

  • -Xdebug:通知JVM工作在除錯模式下
  • -Xrunjdwp:通知JVM使用(java debug wire protocol)來執行除錯環境。引數同時有一系列的除錯選項:
  • <code>session</code>:指定了除錯資料的傳送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享記憶體方式,其中dt_shmem只適用於視窗平臺.server 引數是指是否支援在伺服器模式的虛擬機器中。
  • onthrow:指明當產生該型別的異常時,JVM就會中斷下來,進行調式該引數任選。
  • <code>release</code>:指明當JVM被中斷下來時,執行的可執行程式該引數可選
  • <code>suspend</code><:指明:是否在除錯客戶端建立起來後,再執行 JVM。
  • onuncaught(= y或n)指明出現未捕獲的異常後,是否中斷JVM的執行

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。