posts - 7, comments - 17, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

也谈Eclipse中的远程调试

Posted on 2006-06-13 19:33 Ardor Leo 阅读(2645) 评论(6)  编辑  收藏 所属分类: 有点心得

也谈Eclipse中的远程调试

问题的由来:平时的开发,我们基本都是在 Debug 模式下做的,这样便于发现问题给于修正。一旦项目到了实施测阶段,程序被部署到服务器上,现场调试就会成为一个问题。因为被部署的服务器上的日志往往不能提供足够的信息;或是有了足够的信息,可即时想得到一个状态点的信息又不是太容易(比如说几个关键变量的即时值)。于是想到,如果可以象本机调试程序一样就好了。

于是(呵呵,又是于是), google 了一下,真得还是找到了一篇文章(先谢谢了),做法是

只要在 TOMCAT 的启动文件中加入一些参数就可以在 ECLIPSE 中启动 REMOTE_DEBUG 了,具体方法如下:
%TOMCAT_HOME%\bin\catalina.bat 文件中加入 SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9046
打开 ECLIPSE ,在 ECLIPSE RUN 菜单中选择 DEBUG... 项,然后在左边的树形菜单中新增一个 REMOTE_DEBUG( 远程调试 ) ,填 写最基本的几项信息就行了,这几项信息是:调试名称,工程名称,调试主机的 URL 以及 PORT ,在 allow terminate of remote VM 前打上勾 . 最主要的就是端口信息,这个端口信息来自于上面那一串参数中的 address 项,可以将 address 设置为任何未被占用的端口。
以控制台方式启动 TOMCAT ,可以在控制台看到 "Listening for transport dt_socket at address: 5888" 这样的信息,说明调试端口已经被监听。然后打开之前设置的调试并在 IE 或者 ECLIPSE 内置的浏览器中输入 URL 运行 WEB 程序,记得在运行 WEB 程序之前要设置断点。
现在就可以在 ECLIPSE 中进行 WEB 调试了 ...

要说明的是:

我并没按上文那样设置变量。我看了 catalina.bat 这个批处理文件,写的很严谨,环境变量设置有它自己的规范,我不想更改。在这个文件我看到了这么一个名字 setenv.bat 。对了,看到它你就知道,你可以建立这么一个文件把 SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9046 放进去,OK啦。但这是只是 windows 中的作法。

岔开说一句话。其实,上面的参数设置并不是都需要的,主要的就两项: transport address ,对应于 catalina.bat 文件中 JPDA_TRANSPORT JPDA_ADDRESS 现两个变量,你可以直接查询并修改这两个参数的值,注意 JPDA_TRANSPORT 的值一定是 dt_socket 才行。不过启动方式有些变化,命令行需要这样: catalina.bat jpda start

Linux 中,可以直接 ./ catalina.sh jpda start 命令直接启动调试模式,不过默认的端口是 8000 , 你也可以在 catalina.sh 查找 JPDA_ADDRESS="8000" 把端口修改想要的值。至于写配置文件 setenv.sh 直接用 ./starup.sh 启动的形式,我没成功,呵呵

下面这个就是 Eclipse 中的 Debug 设置窗口了,别告诉我你不会调出来,呵呵

remote.jpg 

这里,我在本机也用 remote 调试程序。当然,自然是有好处的了。 eclipse 中调程序的都知道,在 eclipse 中再启动其他服务(不一定是 Tomcat 啦),会使eclipse编辑的响应速度急剧下降,甚至假死,很是不爽!现在好了,这么一设,既有了速度,又可以设调试断点,哈哈,舒服啊。


评论

# re: 也谈Eclipse中的远程调试  回复  更多评论   

2006-06-14 06:48 by thinkbase.net
这个......叫做 JPDA, 建议有空搜索一下 JPDA, 了解一下相关知识

# re: 也谈Eclipse中的远程调试  回复  更多评论   

2006-06-14 06:52 by thinkbase.net
事实上所有Java程序都支持这样的调试, 注意到 suspend=n 没有, 如果 suspend=y, 那么Java程序启动时会等在那里直到你的调试器通过JPDA连上去之后再接着运行, 我以前调试 Ant 的自定义 Task 用过. 至于调试 Application Server 那更是常用, JBoss, Weblogic, Websphere 都这样调试过.

# re: 也谈Eclipse中的远程调试  回复  更多评论   

2006-06-14 18:46 by Ardor Leo
注意到到高人的回复了,谢谢!

# re: 也谈Eclipse中的远程调试  回复  更多评论   

2006-06-15 23:02 by steeven
楼主是火星人,鉴定完毕         ---布什

# re: 也谈Eclipse中的远程调试  回复  更多评论   

2006-06-20 15:17 by Andy luo
你这样说他会去做沙大木的

# re: 也谈Eclipse中的远程调试  回复  更多评论   

2009-06-09 20:38 by ufo
www.gm365.com上发布的web server软件UFO不会出现一个字节的内存泄漏和一个线程的不能回收,使用UFO做Web Server的好处是网站能做得很稳定,永远也不会自己down掉;UFO在托管机房丢包率很高、遭受Hacker攻击、互联网 骨干网被黑等恶劣的环境条件下仍然能很好地运行;UFO在对付Hacker方面(防Hacker弄down和Hacker抓取不该访问的资源)也有足 够措施。
另外,UFO几乎不会进行垃圾回收,消耗CPU很少,在普通的PC Server上用UFO运行网站,平时CPU占用率<0.1%,最多时也不会超 过5%。您知道,JVM的垃圾回收会导致大量的运算,消耗很多CPU,从而导致Server的负载能力和响应速度下降。UFO在对象管理方面采 用了很好的机制和算法,做得很出色。用UFO运行网站,可以一直保证高负载能力,快速的响应速度和低CPU消耗。

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问