Java 提供了遠(yuǎn)程debug的功能,這確實(shí)是一件很好的事。它能夠幫助我們?cè)谝恍]有虛機(jī)的OS(比如HP,AIX,等等)下調(diào)試我們的程序。
1.建立Remote debug的準(zhǔn)備工作。
a.可以將這些在java命令行中的設(shè)置放到一個(gè)script中去。例子如下所示:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y -classpath
其中,“-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y”是必須的。suspend=y---表明是在程序啟動(dòng)后hang在那個(gè)端口處并監(jiān)聽(如果設(shè)為n,則不會(huì)hang);address=8787---表明是在遠(yuǎn)端機(jī)器上的端口號(hào)。除此之外,在java后也可以添加java的系統(tǒng)環(huán)境變量,如-D等等。
b.在eclipse中可以通過設(shè)立一個(gè)remote debug的方式來(lái)建立這種連接。
2.遠(yuǎn)程調(diào)試時(shí),局部變量的值無(wú)法Watch/Inspect問題的解決
這實(shí)際上是由eclipse在build的時(shí)候,沒有將javac后的option -g加上去。只有當(dāng)加上 -g這個(gè)參數(shù)時(shí),所有的調(diào)試信息才會(huì)被build到class文件中去。
但ecipse沒有提供這樣在build時(shí)設(shè)置參數(shù)的user interface。所以,最好的方式就是寫一個(gè)Ant腳本。
例子如下,
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="build" name="ssdv">
<property name="build.location" value="../ssdv_build"/>
<property name="debuglevel" value="source,lines,vars"/><!--必須的-->
<property name="target" value="1.5"/>
<property name="source" value="1.5"/>
<target name="init">
<mkdir dir="bin"/>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}"> <!--必須的-->
<src path="."/>
<classpath refid="ssdv.classpath"/>
</javac>
</target>
</project>
這樣,將生成的build工程拷貝到要測(cè)試的遠(yuǎn)程OS。啟動(dòng)腳本,然后就可以看到local variables了。