CowNew开源团队网站 http://www.cownew.com
论坛 http://www.cownew.com/newpeng/
转载请注明此版权信息
今天做的事情比较杂,所以感想也比较杂:
1、java程序的远程调试。
“JPDA是sun jdk自带的远程调试机制。它提供了一套标准的调试接口,可以从虚拟机一级允许外界用特定协议探测虚拟机内部的运作细节。只要你装了jdk 1.2以上的sun jdk,就已经有了jpda支持。 只要是用标准JDK中java.exe运行的应用,就可以用jpda进行远程调试。以web应用的开发为例,servlet和ejb的调试一直不是一件太容易的事情。虽然jbuilder、eclipse等有一些常见的应用服务器,如tomcat, weblogic 6.x,的调试插件,但是用法各不相同,而且很容易由于版本问题导致出现各种问题,而且对于有的服务器则没有相应的IDE插件。
JPDA就不一样。由于它是java平台的标准功能之一,所以我们其实可以调试任何用jdk运行的程序。只需要做两件事:
(1)、 在被调试的应用上,增加几个java虚拟机启动参数,让它启动后进入调试服务器模式;
(2) 在本机或网络中另一台机器上用某种jpda客户端程序,attach到被调试的应用程序(可以通过socket或共享内存两种方式)。jpda本身只是一个接口,调试工具的好用与否就要看其对jpda的应用如何。jdb是sun jdk自带的命令行jpda调试客户程序,你可以用命令行设置断点,查看变量值,等等。但不是很直观。而jbuilder、eclipse的jpda调试器就做到了将jpda图形化,可以直观的设置断点,跟踪程序,查看量值,等等。 ”---本段改编自“http://www.cjsdn.com/post/print?bid=7&id=1376”
以elipse+tomcat为例:
(1)打开Tomcat 5.0\bin下的catalina.bat,在“set JPDA= ”下加入如下两行:
set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=8787
(2)启动tomcat
(3)在eclipse的debug中新建一个“Remote Java Application”,工程选择被调试的远程程序的源码工程,host填127.0.0.1,port为8787
(4)运行调试。
这样我们就可以在eclipse中下断点调试tomcat中运行的程序了。让那些乱七八糟的插件哪凉快去哪呆着吧。
注意一定要保证eclipse工程中的源码和tomcat中运行的程序一致。
2、调用对象的wait方法的时候有可能会抛出InterruptedException异常,以前我是把这个异常再次抛出,今天运行发现当这个异常抛出的时候,线程就死掉了。因此不能简单的将此异常re-throw,必须处理它,比如JDBMonitor中的BlockedChannel的take方法就要如下改写:
public synchronized Object take()
{
if (container.isEmpty())
{
try
{
wait();
} catch (InterruptedException e)
{
return null;
}
}
Object obj = container.pop();
return obj;
}
3、windows下运行linux的最好的工具
最近一直想验证JDBMonitor在linux底下是否有bug,但是听人说过,linux安装不当很容易发生数据丢失,因此一直不敢装。而用virtual PC,VMWare之类的软件又太消耗内存,而且需要虚拟机安装完成再安装linux。今天无意中搜索到一个windows下的linux虚拟机:MetroPipe VPM 。
下载地址:
http://www.metropipe.net/ProductsPVPMDownload.shtml
解压后直接运行其中的qemu-win.bat就能启动Linux。不用安装,启动关闭都非常快,而且占用内存相对来说比较小。
唯一一个缺点就是默认就进入图形模式,抽时间看看怎么配置让它启动以后进入字符模式。
详细可以参考:http://www.highand.com/viewthread.php?tid=545