Wednesday, April 23, 2008

java remote debug

在I组的时候经常使用java远程调试的功能,觉得用起来很方便。

这两天在新的环境中重新配置了这个功能,经过gongle,baidu一番后,也有些心得,分享一下:
1, 要使用java remote debug功能,只需要在所调试代码对应的JVM启动的时候加入以下参数:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

其中"address=8000"指定了Eclipse attach的端口,在Eclipse中设置代码运行server的ip及这个监听端口之后就可以在Eclipse中进行远程调试了。

2, 要保证所运行的代码与Eclipse本地的代码是一致的,不然设置的断点会不起作用。

3, 如果使用ant对java代码进行编译的话,要在build.xml中设置debug属性为打开。

4, 在Eclipse中设置断点的时候,断点的图标有时候不太一样,仅仅为小圆圈的断点只是表明你设置了这个断点,当在Eclipse中打开远程调试模式之后,如果该小圆圈的左下角多了一个小勾,那就表明这个断点被"installed"了,代码运行到这个位置的时候会停住,如果小圆圈左下角没有出现这个小勾,那么这个断点在代码运行的时候不会起作用,就是说代码不会停住。
引起小勾不出现的原因可能会是 (1), 代码编译的时候没有打开debug选项。 (2), 代码编译的时候为了防止别人反编译,进行了混淆处理。

我在今天的调试中就碰到了第二种情况,将编译时的混淆功能关掉之后才能进行远程调试,感觉java代码的混淆真是双刃剑啊。

在eclipse的帮助中搜索JDT icons可以看到所有图标的含义。

No comments: