遠程調試運行在Resin上面的Web應用程序

有時候,咱們不得不放棄在本地調試咱們的程序,把咱們的程序先佈署到服務器,而後把調試信息都記在日誌中,用眼睛瞅日誌來調試程序。java

不是用這種方式不行,只是效率過低,原本寫程序是一件開心的事情,卻變得使人心煩。shell

其實,Java自己支持遠程調試,只要增長一些JVM的啓動參數,就能夠遠程調試了,JVM啓動參數就像下面的樣子:vim

-Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,address=9988,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=9988          調試服務器的端口號,客戶端用來鏈接服務器的端口號。
suspend=y/n           是否在調試客戶端創建鏈接以後啓動 VM 。
app

寫出來的樣子大概是這樣的:jvm

java  -Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,address=9988,suspend=n test.package.Main


配置遠程服務器
socket

若是咱們想要調試一個Web應用程序,那麼在啓動Web服務器時須要增長上面的JVM參數。tcp

因爲最近我在使用Resin,因此就以Resin 4.0做爲例子來講明一下(主要緣由是網上說的都無論用)。spa

  • 環境:CentOS 6.3debug

  • 應用服務器:Resin4.0

  • JDK版本:JDK6

# 進入Resin的配置文件目錄
# cd /usr/local/resin/conf
# ll
total 80
-rw-r--r-- 1 root root 12620 Oct 24 22:42 app-default.xml
-rw-r--r-- 1 root root 6447 Oct 24 22:42 cluster-default.xml
-rw-r--r-- 1 root root 21594 Oct 24 22:42 health.xml
drwxr-xr-x 2 root root 4096 Oct 24 22:42 keys
drwxr-xr-x 2 root root 4096 Oct 24 22:42 licenses
-rw-r--r-- 1 root root 5119 Oct 24 22:42 resin.properties
-rw-r--r-- 1 root root 12404 Mar 27 18:08 resin.xml


Resin啓動時的JVM參數在resin.xml裏面配置。

# vim resin.xml

<cluster id="app-youyuan">
    <root-directory>.</root-directory>
    <server-default>
      <http address="*" port="8080" />
        <jvm-arg>-Xms1024m</jvm-arg>
        ... ... ...
        <jvm-arg>-Xdebug</jvm-arg>
        <jvm-arg>-Xrunjdwp:transport=dt_socket,address=9988,server=y,suspend=n</jvm-arg>
    </server-default>
  </cluster>


cluster -> server-default 結點裏面設置JVM參數。

設置完成後重啓resin:

/usr/local/resin/bin/resin.sh restart -server youyuan

啓動完後,檢查端口:

 # netstat -apn | grep 9988
tcp 0 0 你機器的IP:9988 這裏是IP:51840 ESTABLISHED 30130/java

能夠看到,已經正常啓動了。剩下的就是在本地連到服務器上進行調試了。


本地使用Eclipse鏈接服務器進行遠程調試

  • Eclipse版本:4.3

1. 右擊要調試項目,在彈出的菜單中點擊 Debug AS -> Debug Configurations...

    如圖所示,右擊Remote Java Application,新建一項,


在Project中選中要遠程調試的項目,在Connection Type中選擇Socket Attach,在Connection Propertyies中設置遠程調試的應用的IP地址及端口。

而後點擊Apply,Debug就能夠鏈接了。

相關文章
相關標籤/搜索