有时候,我们不得不放弃在本地调试我们的程序,把我们的程序先布署到服务器,然后把调试信息都记在日志中,用眼睛瞅日志来调试程序。
不是用这种方式不行,只是效率太低,本来写程序是一件开心的事情,却变得令人心烦。
其实,Java本身支持远程调试,只要增加一些JVM的启动参数,就可以远程调试了,JVM启动参数就像下面的样子:
-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 。
写出来的样子大概是这样的:
1 |
java -Xdebug -Xnoagent -Djava.compiler=NONE |
2 |
-Xrunjdwp:transport=dt_socket,server=y,address=9988,suspend=n test .package.Main
|
配置远程服务器
如果我们想要调试一个Web应用程序,那么在启动Web服务器时需要增加上面的JVM参数。
由于最近我在使用Resin,所以就以Resin 4.0作为例子来说明一下(主要原因是网上说的都不管用)。
-
环境:CentOS 6.3
-
应用服务器:Resin4.0
-
JDK版本:JDK6
01 |
# 进入Resin的配置文件目录 |
02 |
# cd /usr/local/resin/conf |
03 |
# ll |
04 |
total 80 |
05 |
-rw-r--r-- 1 root root 12620 Oct 24 22:42 app-default.xml |
06 |
-rw-r--r-- 1 root root 6447 Oct 24 22:42 cluster-default.xml |
07 |
-rw-r--r-- 1 root root 21594 Oct 24 22:42 health.xml |
08 |
drwxr-xr-x 2 root root 4096 Oct 24 22:42 keys |
09 |
drwxr-xr-x 2 root root 4096 Oct 24 22:42 licenses |
10 |
-rw-r--r-- 1 root root 5119 Oct 24 22:42 resin.properties |
11 |
-rw-r--r-- 1 root root 12404 Mar 27 18:08 resin.xml |
Resin启动时的JVM参数在resin.xml里面配置。
# vim resin.xml
01 |
< cluster id = "app-youyuan" >
|
02 |
< root-directory >.</ root-directory >
|
03 |
< server-default >
|
04 |
< http address = "*" port = "8080" />
|
05 |
< jvm-arg >-Xms1024m</ jvm-arg >
|
06 |
... ... ...
|
07 |
< jvm-arg >-Xdebug</ jvm-arg >
|
08 |
< jvm-arg >-Xrunjdwp:transport=dt_socket,address=9988,server=y,suspend=n</ jvm-arg >
|
09 |
</ server-default >
|
10 |
</ cluster >
|
在 cluster -> server-default 结点里面设置JVM参数。
设置完成后重启resin:
1 |
/usr/ local /resin/bin/resin.sh restart -server youyuan
|
启动完后,检查端口:
1 |
# netstat -apn | grep 9988
|
2 |
tcp 0 0 你机器的IP:9988 这里是IP:51840 ESTABLISHED 30130/java |
可以看到,已经正常启动了。剩下的就是在本地连到服务器上进行调试了。
如果使用的是TOMCAT
本地使用Eclipse连接服务器进行远程调试
-
Eclipse版本:4.3
1. 右击要调试项目,在弹出的菜单中点击 Debug AS -> Debug Configurations...
如图所示,右击Remote Java Application,新建一项,
在Project中选中要远程调试的项目,在Connection Type中选择Socket Attach,在Connection Propertyies中设置远程调试的应用的IP地址及端口。
然后点击Apply,Debug就可以连接了。
如果遇到端口被占用,应用服务器启动不了,可以先查找端口
命令: lsof -i:8001
然后杀掉相应进程即可
相关推荐
在Web浏览器中远程调试您的iOS应用程序。.zip,在Web浏览器中远程调试iOS应用程序。
nodejs-vscode-调试 使用VS Code远程调试您的Node.js Web应用程序
远程应用远程 Web 应用程序加载器要求建造科尔多瓦建造 cordova platform add androidcordova build跑步像往常一样安装生成的 apk 或: 用usb连接手机在手机上启用调试 USB 然后: 科尔多瓦运行安卓它将上传并运行该...
weinre-tap 只需一个命令,即可远程测试您的静态移动应用这很简单: cd /path/to/static/mobile/appweinre-tap然后打开你的手机浏览器到你机器的IP地址安装npm install -g weinre-tap执照 The MIT License (MIT)...
InstroCommTool 用于Linkware Live和Linkware PC类型Web应用程序的自定义工具,可帮助构建ATP /调试结果,跟踪进度并远程存储数据
《JavaScript Web 富应用开发》Developing JavaScript Web Applications是 Alex MacCaw 的新作(由O'Reilly出版发行),本书系统而深入的讲解了如何使用最前沿的Web技术构建下一代互联网富应用程序。作者 Alex ...
常规调试因果性调试:Web服务客户端和Web服务之间的步骤远程调试简介在过去的几个月中,我曾与许多存在调试问题的用户一起工作,他们之中有一部分来自Microsoft内部。我发现,如果用户能得到正确的诊断,则很多常见...
远程Redux DevTools监视应用程序 Web,Electron和Chrome应用程序,用于监视 。 可以在上访问。 它也是一个React组件,可用于构建出色的监视器应用程序,例如: 。 -Electron应用程序,已经包括remotedev-server ...
使用AppSpector,您可以远程调试在同一个房间或在另一个大陆上运行的应用程序。 您可以实时评估应用程序性能,查看数据库内容,日志,网络请求等。 这是您一直在寻找的乐器。 不要只限于简单的日志。 调试不必很痛苦...
Orion.net 开源工具,用于远程调试和测试WPF或Xamarin.Forms应用
全面介绍VB.NET开发环境的配置、深入讲解异常、线程、进程相关知识;日志记录与程序化高度器的交互、WEB应用程序的调试以及远程高级应用程序的调试等。
Excel 权限错误和应用程序8000401A错误解决办法;对 Excel进行编程,实际上就是通过 .Net Framework去调用 Excel的 COM组件,所有要在 Web环境下调用 COM组件的时候,都需要对其进行相应的配置。 很多朋友都反映在 ...
Java程序可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。Java的跨平台特性使得Java程序可以在任何支持Java虚拟机的操作系统上运行,包括Windows、Linux、Mac OS等。这使得Java...
Java程序可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。Java的跨平台特性使得Java程序可以在任何支持Java虚拟机的操作系统上运行,包括Windows、Linux、Mac OS等。这使得Java...
Java程序可以用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。Java的跨平台特性使得Java程序可以在任何支持Java虚拟机的操作系统上运行,包括Windows、Linux、Mac OS等。这使得Java...