欢迎来到天天文库
浏览记录
ID:9794801
大小:94.00 KB
页数:27页
时间:2018-05-10
《一个调试jsp的eclipse插件的开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、【摘要】本文通过开发一个JSP编辑器插件的示例,介绍了Eclipse中设置JSP断点的方法,以及如何远程调试JSP。作为基础知识,本文的前两部分描述了JAVADebug和JSR-45的基本原理。 本文通过开发一个JSP编辑器插件的示例,介绍了Eclipse中设置JSP断点的方法,以及如何远程调试JSP。作为基础知识,本文的前两部分描述了JAVADebug和JSR-45的基本原理。 环境要求:本文的代码是在Eclipse3.0.0,JDK1.4.2和Tomcat5.0.5上测试过的。 JAVA调试框架(JPDA)简介 JPD
2、A是一个多层的调试框架,包括JVMDI、JDWP、JDI三个层次。JAVA虚拟机提供了JPDA的实现。其开发工具作为调试客户端,可以方便的与虚拟机通讯,进行调试。Eclipse正是利用JPDA调试JAVA应用,事实上,所有JAVA开发工具都是这样做的。SUNJDK还带了一个比较简单的调试工具以及示例。·JVMDI定义了虚拟机需要实现的本地接口·JDWP定义了JVM与调试客户端之间的通讯协议调试客户端和JVM既可以在同一台机器上,也可以远程调试。JDK会包含一个默认的实现jdwp.dll,JVM允许灵活的使用其他协议代替JDWP。S
3、UNJDK有两种方式传输通讯协议:Socket和共享内存(后者仅仅针对Windows),一般我们都采用Socket方式。你可以用下面的参数,以调试模式启动JVM-Xdebug-Xnoagent-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n-XrunjdwpJVM加载jdwp.dlltransport=dt_socket使用Socket传输address表示调试端口号server=y表示JVM作为服务器,建立Socketsuspend=n表示启动过程中,JV
4、M不会挂起去等待调试客户端连接·JDI则是一组JAVA接口如果是一个JAVA的调试客户端,只要实现JDI接口,利用JDWP协议,与虚拟机通讯,就可以调用JVMDI了。 下图为JPDA的基本架构:ComponentsDebuggerInterface/
5、-----------------------
6、/
7、VM
8、debuggee----(
9、-----------------------
10、<-------JVMDI-JavaVMDebugInterface
11、back-end
12、
13、-----------------------
14、/
15、c
16、ommchannel-(
17、<---------------JDWP-JavaDebugWireProtocol
18、
19、---------------------
20、
21、front-end
22、
23、---------------------
24、<-------JDI-JavaDebugInterface
25、UI
26、
27、---------------------
28、 参见:http://java.sun.com/j2se/1.4.2/docs/guide/jpda/architecture.html Eclipse作为一个基于JAVA的调试客户端,利用
29、org.eclipse.jdt.debugPlugin提供了JDI的具体实现。JDI接口主要包含下面4个包com.sun.jdicom.sun.jdi.connectcom.sun.jdi.eventcom.sun.jdi.request 本文不对JDI进行深入阐述,这里重点介绍JDI中与断点相关的接口。·com.sun.jdi主要是JVM(VirtualMachine)线程(ThreadReference)调用栈(StackFrame)以及类型、实例的描述。利用这组接口,调试客户端可以用类似类反射的方式,得到所有类型的定义,动
30、态调用Class的方法。·com.sun.jdi.event封装了JVM产生的事件,JVM正是将这些事件通知给调试客户端的。例如BreakpointEvent就是JVM执行到断点的时候,发出的事件;ClassPrepareEvent就是Class被加载时发出的事件。·com.sun.jdi.request封装了调试客户端可以向JVM发起的请求。例如BreakpointRequest向JVM发起一个添加断点的请求;ClassPrepareRequest向JVM注册一个类加载请求,JVM在加载指定Class的时候,就会发出一个Clas
31、sPrepareEvent事件。 JSR-45规范 JSR-45(DebuggingSupportforOtherLanguages)为那些非JAVA语言写成,却需要编译成JAVA代码,运行在JVM中的程序,提供了一个进行调试的标准机制。也许字
此文档下载收益归作者所有