Java遠程調試 java -Xdebug各參數說明


JAVA自身支持調試功能,並提供了一個簡單的調試工具--JDB,類似於功能強大的GDB,JDB也是一個字符界面的 
調試環境,並支持設置斷點,支持線程線級的調試

JAVA的調試方法如下: 
1。首先支持JVM,並設置參數,使之工作在DEBUG模式下,加入參數:

-Xdebug -Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,launch=/sbin/echo

其中,

-Xdebug是通知JVM工作在DEBUG模式下,

-Xrunjdwp是通知JVM使用(java debug wire protocol)來運行調試環境。該參數同時了一系列的調試選項: 

  • transport指定了調試數據的傳送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享內存方式,其中,dt_shmem只適用於Windows平台。 
  • server參數是指是否支持在server模式的VM中. 
  • onthrow指明,當產生該類型的Exception時,JVM就會中斷下來,進行調式。該參數可選。 
  • launch指明,當JVM被中斷下來時,執行的可執行程序。該參數可選 
  • suspend指明,是否在調試客戶端建立起來后,再執行JVM。 
  • onuncaught(=y或n)指明出現uncaught exception 后,是否中斷JVM的執行. 

虛擬機參數設置 
  1.啟用調試服務 
    -Xdebug 啟用調試 
    -Xrunjdwp:<sub-options> 加載JVM的JPDA參考實現庫 
  2.Xrunjdwp子參數(sub-options)配置 
    Xrunjdwp子參數的配置格式如下 
    -Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]... 

  幾個例子 
  

-Xrunjdwp:transport=dt_socket,server=y,address=8000 

  在8000端口監聽Socket連接,掛起VM並且不加載運行主函數直到調試請求到達 

-Xrunjdwp:transport=dt_shmem,server=y,suspend=n 

  選擇一個可用的共享內存(因為沒有指address)並監聽該內存連接,同時加載運行主函數 

-Xrunjdwp:transport=dt_socket,address=myhost:8000 

  連接到myhost:8000提供的調試服務(server=n,以調試客戶端存在),掛起VM並且不加載運行主函數 

-Xrunjdwp:transport=dt_shmem,address=mysharedmemory 

  通過共享內存的方式連接到調試服務,掛起VM並且不加載運行主函數 

-Xrunjdwp:transport=dt_socket,server=y,address=8000, onthrow=java.io.IOException,launch=/usr/local/bin/debugstub 

  等待java.io.IOException被拋出,然后掛起VM並監聽8000端口連接,在接到調試請求后以命令/usr/local/bin/debugstub dt_socket myhost:8000執行 

  -Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe 

  等待一個RuntimeException被拋出,然后掛起VM並監聽一個可用的共享內存,在接到調試請求后以命令d:\bin\debugstub.exe dt_shmem <address>執行,<address>是可用的共享內存 


2。啟動調試工具。 
最簡單的調試工具就是上面提到的JDB,以上述調試用JVM為例,可以用下面的命運行啟動JDB: 
jdb -connect com.sun.jdi.SocketAttach:port=5432,hostname=192.168.11.213 
另外,還有好多的可視化調試工具,如 eclipse,jsawt等等。Eclipses可用 ant debug來建立一個調試方法。 


其實就是使用了JDK的JPDA,在啟動服務器(Jboss或者Tomcat等)的命令行參數里面加上: 

-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n 

Java遠程調試 

  • -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=3999,suspend=n 
  • -XDebug                    啟用調試。 
  • -Xnoagent                 禁用默認sun.tools.debug調試器
  • -Djava.compiler=NONE    禁止 JIT 編譯器的加載 
  • -Xrunjdwp                 加載JDWP的JPDA參考執行實例
  • transport                  用於在調試程序和 VM 使用的進程之間通訊 
  • dt_socket                 套接字傳輸
  • dt_shmem                  共享內存傳輸,僅限於 Windows
  • server=y/n                  VM 是否需要作為調試服務器執行
  • address=3999              調試服務器的端口號,客戶端用來連接服務器的端口號
  • suspend=y/n                是否在調試客戶端建立連接之后啟動 VM  

Resin: 
RESIN_HOME\bin\httpd.exe -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n 
Tomcat: 
在catalina.sh/bat 的最上面加上:

SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

即可 
Weblogic: 
在startWebLogic.bat加上:

set JAVA_OPTIONS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 


免責聲明!

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



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