对于在本地运行的程序,一般开发人员都知道如何运用调试工具进行调试, 但是Applet程序的调试就很不方便了。一般调试Applet程序都是使用Applet Viewer进行调试,但是某些Applet程序并不方便用Applet Viewer进行调试,例如程序依赖的Web页面是动态生成的。
下面介绍一种使用JDWP(JavaTM Debug Wire Protocol)远程调试Java应用程序的方法。
1. 在程序运行机器上为Applet程序启动时自动开启JDWP服务。
$>cd $JAVA_HOME/bin
$>./ControlPanel
在随后弹出的Java Control Panel对话框中,选择Java Tab页,在Java Applet Runtime Settings项中点击View按钮,在弹出的Java Runtime Versions对话框中设置Java Runtime Parameters为:
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
注:Windows上可到控制面板中运行Java控制面板程序打开Java Control Panel对话框。
2. 在Eclipse中建立Java Service Client程序的工程,使其包含需要调试的源代码。编译打包目标代码并拷贝到上一步设置好的机器上的相应目录中。注意编译时要选择打开debug模式(确保javac的调试相关参数为-g或没有。如果使用Eclipse编译,请使用Eclipse的相关设置,Eclipse默认的编译选项是打开debug选项的)。
3.在设置好的机器上启动目标程序。
4.在Eclipse中使用Debug对话框建立一个Remote Java Application调试项目。填入下列信息:
Host:程序执行机器的IP地址
Port:8000 (就是是第一步设置的address参数)
启动这个调试项目。
好了,下面可以像本地调试一样调试你的程序了。你可以随意的设置断点,修改运行时的变量值,等等。并且以后每次启动程序后,如果临时出现bug可以随时的连上去进行调试了,是不是很方便;-)
对于一般的Java应用程序和Web应用程序当然也可以用类似的方法进行远程调试了,只要在java虚拟机的命令行上添加相同的参数即可。
提示:如果将suspend参数设为y,则每次启动程序都会自动挂起,直到远程调试机器连接上后才继续执行。这样就可以从程序入口处单步跟踪程序的执行过程了。
下面介绍一种使用JDWP(JavaTM Debug Wire Protocol)远程调试Java应用程序的方法。
1. 在程序运行机器上为Applet程序启动时自动开启JDWP服务。
$>cd $JAVA_HOME/bin
$>./ControlPanel
在随后弹出的Java Control Panel对话框中,选择Java Tab页,在Java Applet Runtime Settings项中点击View按钮,在弹出的Java Runtime Versions对话框中设置Java Runtime Parameters为:
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
注:Windows上可到控制面板中运行Java控制面板程序打开Java Control Panel对话框。
2. 在Eclipse中建立Java Service Client程序的工程,使其包含需要调试的源代码。编译打包目标代码并拷贝到上一步设置好的机器上的相应目录中。注意编译时要选择打开debug模式(确保javac的调试相关参数为-g或没有。如果使用Eclipse编译,请使用Eclipse的相关设置,Eclipse默认的编译选项是打开debug选项的)。
3.在设置好的机器上启动目标程序。
4.在Eclipse中使用Debug对话框建立一个Remote Java Application调试项目。填入下列信息:
Host:程序执行机器的IP地址
Port:8000 (就是是第一步设置的address参数)
启动这个调试项目。
好了,下面可以像本地调试一样调试你的程序了。你可以随意的设置断点,修改运行时的变量值,等等。并且以后每次启动程序后,如果临时出现bug可以随时的连上去进行调试了,是不是很方便;-)
对于一般的Java应用程序和Web应用程序当然也可以用类似的方法进行远程调试了,只要在java虚拟机的命令行上添加相同的参数即可。
提示:如果将suspend参数设为y,则每次启动程序都会自动挂起,直到远程调试机器连接上后才继续执行。这样就可以从程序入口处单步跟踪程序的执行过程了。