sharky的點滴積累

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            56 隨筆 :: 104 文章 :: 10 評論 :: 0 Trackbacks

          最近在JB2006上寫WebAPP時,在啟動服務器調試程序時,總是JB這樣報錯:
          -- Cannot start Java debug process VM --

          com.sun.jdi.connect.VMStartException: VM initialization failed for: F:\Borland\JBuilder2006\jdk1.5\bin\javaw -classpath "F:\Borland\JBuilder2006\thirdparty\jakarta-tomcat-5.5.9\bin\bootstrap.jar;F:\Borland\JBuilder2006\jdk1.5\lib\tools.jar"  "-Dcatalina.home=F:/Borland/JBuilder2006/thirdparty/jakarta-tomcat-5.5.9"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=yuchao-home:1123,suspend=y org.apache.catalina.startup.Bootstrap -config F:\jworkspace\GuestBook\Tomcat\conf\server8080.xml start
          ERROR: transport error 202: connect failed: Connection refused ["transport.c",L41]
          ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L497]
          JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized

          上網搜索了一下找到了原因:
          原處:http://blog.aspcool.com/zephyr/articles/2025.html

          我用JBuilder8以及JBuilder2005開發Web項目時, 不管使用自帶的Tomcat4還是Tomcat5,均無法進入Debug模式, 提示:
          -- Cannot start Java debug process VM --

          com.sun.jdi.connect.VMStartException: VM initialization failed for: C:\JBuilder2005\jdk1.4\bin\javaw -classpath "C:\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;C:\JBuilder2005\jdk1.4\lib\tools.jar"  "-Dcatalina.home=C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381,suspend=y org.apache.catalina.startup.Bootstrap -config D:\abc\Tomcat\conf\server8080.xml start
          Transport dt_socket failed to initialize, rc = 509.


          Goolge了一番后,終于找到了原因:
          由于我的機器上安裝了多個JDK,而且在環境變量%PATH%中, 第一個出現的Java路徑是"D:\jdk1.5\jre\bin",而JB使用的Java是"C:\JBuilder2005\jdk1.4\bin\ javaw",因而導致了"Connector"的問題.

          顯然, 解決的方法無非是以下二者之一::
          一. 設置Path變量的Java路徑, 使之指向JB的Java
          二. 設置Jbuilder's JDK路徑,使之同Path里面的JDK路徑一致 (我的做法). 具體方法:
           a. Tool->Configure->JDK, 把 "D:\jdk1.5" 加進去.
           b. Project->Project Properties->Run, 依次選擇 "Server" runtime configuration, "Edit", "JDK", use the "specified jdk" , select the jdk1.5

          然后, 啟動Debug模式, OK. 從以下的輸出可以看出不同(注意下劃線部分)
          D:\jdk1.5\bin\javaw -classpath "C:\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;D:\jdk1.5\lib\tools.jar"  "-Dcatalina.home=C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2779,suspend=y org.apache.catalina.startup.Bootstrap -config D:\abc\Tomcat\conf\server8080.xml start
          Mar 15, 2005 11:26:12 AM org.apache.coyote.http11.Http11Protocol init
          http://forum.java.sun.com/thread.jspa?threadID=577610&messageID=3025506

          問題分析:
          Java的調試是通過所謂的JPDA架構(Java Platform Debugger Architecture) 和JDWP協議(Java Debug Wire Protocol), 來實現的. 在JPDA下, 調試器與被調試的VM(Target VM) 通過Transport來通信. Sun實現了兩種Transport: 基于Socket的TCP/IP Transport和共享內存的Transport. 基于Socket的方式可以實現跨平臺的遠程調試, 而共享內存的方式只能在Windows平臺下的同一臺機器上.
          在JPDA下, 調試器通過封裝了Transport的Connector來建立同Target VM的連接, 而Target VM上也有一個VM本身內置的封裝了Transport的Agent來接受連接.

          具體到SUN的VM實現, 為了啟動JDWP Agent以被調試, 在運行Target VM的時候需要加入以下參數: -Xdebug(啟動Debugging) 和 -Xrunjdwp:(配置Connector)

          -Xrunjdwp需要transport屬性指明Connector類型(Socket還是Shared Memory), server屬性指明主動還是被動(server='y', 被動監聽Debugger的連接, server='n', 主動連接到Debugger, 默認是'n'), Address屬性(當server='y'的時候, 表明監聽得端口, 當server=n的時候,表明Debugger的地址.

          回到JB的問題上, 對照JB給出的啟動調試的命令行參數:-Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381 可以知道:JB使用socket方式的Connector啟動Tomcat5(org.apache.catalina.startup.Bootstrap), 主動連接到2381端口上的調試器.

          posted on 2005-10-29 14:48 sharky的點滴積累 閱讀(790) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 三江| 北流市| 广宁县| 原平市| 龙海市| 富锦市| 繁昌县| 枝江市| 诏安县| 崇左市| 阿克苏市| 宝坻区| 辽中县| 逊克县| 呼伦贝尔市| 怀仁县| 城固县| 雅江县| 柘荣县| 新民市| 澜沧| 静宁县| 汉川市| 建湖县| 博客| 沐川县| 昌图县| 洛隆县| 绥中县| 中方县| 芒康县| 嫩江县| 武冈市| 崇信县| 皮山县| 卓资县| 鱼台县| 泸州市| 通山县| 广州市| 南城县|