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

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

在jetty目錄下的start.ini文件中配置java

--exec
-Xdebug
-agentlib:jdwp=transport=dt_socket,address=7085,server=y,suspend=n

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

轉自:http://freedommedal.blog.51cto.com/2799387/519540linux

相關文章
相關標籤/搜索