sharky的點(diǎn)滴積累

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            56 隨筆 :: 104 文章 :: 10 評(píng)論 :: 0 Trackbacks

          最近在JB2006上寫(xiě)WebAPP時(shí),在啟動(dòng)服務(wù)器調(diào)試程序時(shí),總是JB這樣報(bào)錯(cuò):
          -- 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

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

          我用JBuilder8以及JBuilder2005開(kāi)發(fā)Web項(xiàng)目時(shí), 不管使用自帶的Tomcat4還是Tomcat5,均無(wú)法進(jìn)入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了一番后,終于找到了原因:
          由于我的機(jī)器上安裝了多個(gè)JDK,而且在環(huán)境變量%PATH%中, 第一個(gè)出現(xiàn)的Java路徑是"D:\jdk1.5\jre\bin",而JB使用的Java是"C:\JBuilder2005\jdk1.4\bin\ javaw",因而導(dǎo)致了"Connector"的問(wèn)題.

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

          然后, 啟動(dòng)Debug模式, OK. 從以下的輸出可以看出不同(注意下劃線(xiàn)部分)
          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

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

          具體到SUN的VM實(shí)現(xiàn), 為了啟動(dòng)JDWP Agent以被調(diào)試, 在運(yùn)行Target VM的時(shí)候需要加入以下參數(shù): -Xdebug(啟動(dòng)Debugging) 和 -Xrunjdwp:(配置Connector)

          -Xrunjdwp需要transport屬性指明Connector類(lèi)型(Socket還是Shared Memory), server屬性指明主動(dòng)還是被動(dòng)(server='y', 被動(dòng)監(jiān)聽(tīng)Debugger的連接, server='n', 主動(dòng)連接到Debugger, 默認(rèn)是'n'), Address屬性(當(dāng)server='y'的時(shí)候, 表明監(jiān)聽(tīng)得端口, 當(dāng)server=n的時(shí)候,表明Debugger的地址.

          回到JB的問(wèn)題上, 對(duì)照J(rèn)B給出的啟動(dòng)調(diào)試的命令行參數(shù):-Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381 可以知道:JB使用socket方式的Connector啟動(dòng)Tomcat5(org.apache.catalina.startup.Bootstrap), 主動(dòng)連接到2381端口上的調(diào)試器.

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

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 鄂托克旗| 宕昌县| 万源市| 锡林郭勒盟| 乐平市| 华安县| 吴堡县| 且末县| 磐安县| 修水县| 遂川县| 余干县| 孝昌县| 广汉市| 安陆市| 平乐县| 北碚区| 泰和县| 密山市| 崇文区| 上林县| 大余县| 塔城市| 班戈县| 慈利县| 曲沃县| 兰州市| 保靖县| 静乐县| 炉霍县| 固阳县| 泸西县| 河北省| 安陆市| 营山县| 察隅县| 新乐市| 包头市| 饶河县| 山东省| 武汉市|