RCP:eclipse的DEBUG机制
Eclipse debug文档翻译
运行一个程序需要添加launch configurable,在自定义launch configuration的时候会指定模式,比如run,debug,profile等等。如果定义的是debug模式,则需要实现debug模型和UI,这样用户就可以在debug下与后台程序互动。Eclipse的debug插件提供以下支持:
·一个通用的debug模型
·debug事件和监听
·断点管理
·表达式管理
debug UI插件则提供了一个用于可视化展示debug模型的框架,同时还提供了一些实用工具类来实现常见的UI任务。
这里将用java调试器的视角来审视平台debug模型和UI类。
参考:http://www.eclipse.org/articles/Article-Debugger/how-to.html
一、平台debug模型
平台debug模型定义了常用的debug接口,用于继承或者实现具体的,特定语言的实现。
工件(Artifacts)
该模型包括各种不同的类以代表debug下的各种工件。所有的工件都必须额外实现IDebugElement,该模型定义了以下工件:
·Debug对象(IDebugTarget) - 一个可debug的执行上下文,比如一个进程或者虚拟机
·表达式(IExpression) - 代码片段,用于给用户观看、评估
·内存块(IMemoryBlock) - 执行上下文里的连续的内存段
·寄存器(IRegister) - 寄存器组里的命名变量
·寄存器组(IRegisterGroup) - 一组标识栈帧的寄存器
·栈帧(IStackFrame) - 一个挂起的线程里的可执行上下文,包含局部变量和参数。
·线程(ITread) - debug对象里的包含栈帧的执行连续流
·值(IValue) - 变量值
·变量(IVariable) - 一个栈帧或值里的可见数据结构
·观察表达式(IWatchExpression) - 由特定上下文提供,会即时更新它的值
实现特定语言调试器的插件通常会扩展这些接口来包含该语言的特性,所有的debug元素可以返回它们所在插件的ID,对于用于注册那些和调试模型有关的类(比如UI类)来说,这是非常重要的。
动作(Actions)
动作是调试工件的常见特性,自然就会有动作模型,其包含的一些定义调试的动作集的接口。debug元素如有需要,可以实现它们。
·断开(IDisconnect) - 提供了结束目标程序的调试事务,并使之继续运行的能力。
·步进(IStep) - 提供了进入,下一步,以及跳出当前执行点的能力
·步进过滤器(IStepFilters) - 该能力用于允许或者屏蔽步进操作的过滤器,这样目标就可以根据需要来过滤步进。
·挂起和恢复(ISuspendResume) - 该能力可以挂起和回复执行过程
·终止(ITerminate) - 该能力用于中止执行上下文
·修改值(IValueModification) - 该能力用于修改变量值
事件(Events)
Debug事件(DebugEvent)用于描述一个程序被调试时发生的事件。
二、断点
断点允许用于在指定位置挂起程序的执行过程。
如果插件需要在UI里展示断点,开发者可以在IBreakpointManager里添加IBreakpointListener。
断点管理器(IBreakpointManager)是管理所有的断点的中央权威,所有断点都是使用该断点管理器来添加和移除,这又会反过来通知所有监听断点活动的监听者。同样的,断点管理器也可以管理断点的可用不可用状态。断点管理器在DebugPlugin这个全局类里找到,代码如下:
IBreakpointManager mgr= DebugPlugin.getDefault().getBreakpointManager();
定义了自己的debug模型和lannch configuration的插件经常需要定义它们自己的断点类型,这需要实现IBreakpoint接口。
断点的实现要实用资源标记(resource markers)。资源标记可以把资源的相关信息根据name属性关联起来,使用标记来实现断点,debug模型可以利用所有的现有标记功能,如持久化、搜索、在编辑器里搜索、添加或移除标记。
断点标记注册方式:
<extension id="javaBreakpointMarker" point="org.eclipse.core.resources.markers">
<super type="org.eclipse.debug.core.breakpointMarker"/>
</extension>
三、表达式
表达式是一段片段代码,用户观察它,可以对值做出评估。表达式的上下文依赖于特定的debug模型,有些表达式可能需要在程序的特定位置做评估,来决定它的变量是否可以被引用。表达式的接口是IExpression。
表达式管理器(IExpressionManager)保持了所有的workspace里的表达式的轨迹,它也可以发起事件来唤起监听,比如表达式被添加了,移除了,又或者是修改了。
表达式可以用来实现“检查器”或“剪贴簿”,来让用户评估代码片段。
观察表达式(watch expression)用来在程序执行期间做重复多次评价的表达式,其接口是IWatchExpression。当有新的debug上下文提供时,该表达式的值会被更新。观察表达式常用来实现“观察列表”,这是一张用来展示程序执行期间表达式值的改变的表格。
四、Debug模型演示
由于Eclipse的debug元素有一个通用的、统一的模型,所以,自定义一个调试器UI是可行的。调试器UI的核心支持在于debug模型展示(IDebugModelPresentation)。它负责提供特定的debug模型的labels、images、和编辑器相关元素。
自定义debug模型的插件通常提供有模型展示,使用org.eclipse.debug.ui.debugModelPresentation扩展点可以完成该功能,该扩展点用于把某个IDebugModfelPersentation的实现与特定的debug模型关联在一起。例子如下:
<extension point = "org.eclipse.debug.ui.debugModelPresentations">
<debugModelPresentation
class = "org.eclipse.jdt.internal.debug.ui.JDIModelPresentation"
id = "org.eclipse.jdt.debug"
detailsViewerConfiguration = "org.eclipse.jdt.internal.debug.ui.display.DetailsViewerConfiguration">
</debugModelPresentation>
</extension>
detailsViewerConfiguration选项可以附加给debug模型展示,它必须实现SourceViewerConfiguration类。"细节(details)"的含义是被debug模型所解释的,这些细节被debug模型展示计算,然后被传递给细节视图。举个例子,java调试器使用细节视图来展示变量视图里的代码辅助当表达式被估值的时候。
实现IDebugModelPresentation的时候可能要同时实现IDebugEditorPresentation。
五、Debug UI工具类
用于实现debugUI的工具类。
DebugUITools:
·在加载特定加载配置前保存\构建workspace
·存储和检索代表debug UI细节的图片
·查找debug UI展示和debug模型的关联
·debug插件引用存储的检索
·debug时的相关信息,比如当前上下文,进程或者控制台
·出现各种缺省时,打开launch Configuration对话框
·设置step过滤器的可用状态
IDebugView:通常需要继承AbstractDebugView
·在一个Action注册机里存储Action
·底层视图的上下文菜单的通用处理
·删除键和双击功能的通用实现
·在视图里展示错误信息的机制
RCP:eclipse的DEBUG机制的更多相关文章
- eclipse tomcat debug启动慢
myeclipse或eclipse下debug模式启动很慢,默认模式也是debug,网上找了终于解决, 原因是有eclipse或myeclipse启动debug时自动添加断点,所以必须删除一些东西. ...
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
1.IP简述使用//获取本地主机ip地址对象.InetAddress ip = InetAddress.getLocalHost();//获取其他主机的ip地址对象.ip = InetAddress. ...
- Eclipse 的 Debug 介绍与技巧【转载】
没有任何程序员能够一气呵成的写出没有任何 Bug 的代码,所以很多程序员有相当一部分时间是花费在 Debug 上的,程序调试是每个程序员必须面对的工作.如何使用 Eclipse 进行有效的.尤其是高效 ...
- eclipse远程debug
由于一般比较正规项目,都会有好几个版本,有时候在测试版本的时候,一切都好好的,然后提交到其他版本之后会有各种各样的问题,这个时候如果不能快速准确的定位到问题,那么我们就需要用 eclipse远程deb ...
- Eclipse 的 Debug 介绍与技巧
转载: Eclipse 的 Debug 介绍与技巧
- [转]在Eclipse中Debug 为什么显示source not found
在Eclipse中Debug 为什么显示source not found http://zhidao.baidu.com/link?url=-jna2HB_k2FW72GPbT--5Qg2AWi3Ip ...
- 在Eclipse下debug 出现Source not found for ...
在Eclipse下debug 出现Source not found for ... 在Eclipse下调试Servlet出现了Source not found for XxxAction.execut ...
- Eclipse中debug调试java代码一直报Source not found的解决办法
今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...
- Eclipse 中 Debug 时鼠标悬停无法查看变量值
问题描述:Eclipse在Debug模式下,当鼠标移动到某个变量上面时不自动显示该变量对应的值. 解决方法:在Eclipse中点击 Window->Preferences->Java-&g ...
随机推荐
- My安卓知识2--使用listview绑定sqlite中的数据
我想在我的安卓项目中实现一个这样的功能,读取sqlite数据库中的数据并显示到某个页面的listview控件中. 首先,我建立了一个Service类,来实现对数据库的各种操作,然后在这个类中添加对数据 ...
- php设计模式 Proxy (代理模式)
代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行 ...
- Hibernate查询
HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...
- java反射案例
Java反射经典实例 2007-08-29 17:55:25 分类: Java Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫——反射.反射机制是如今很多流行框架的实现 ...
- 移动web前端小结(一)--摘自小鹿_同学
一.框架 框架:Bootstrap+HTML5 Boilerplate. 两个框架整合到一起可以看一下这位大神的文章:<使用 Bootstrap 和 HTML5 Boilerplate 开始一个 ...
- 关于Java深clone 的例子学习
之前http://www.cnblogs.com/lhppom/p/4857702.html里有提到关于Java的深克隆的学习,深浅区别就是在于仅复制对象引用和复制对象引用所指向的对象,最近在看< ...
- CentOS 7下设置DNS服务器
在CentOS 7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.和CentOS 6下的设置DNS方法不同,有几种方式: 1.使用全新的命令行工具 ...
- Method not found : Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean) ...
- 黑马程序员_Java基础:IO流总结
------- android培训.java培训.期待与您交流! ---------- IO流在是java中非常重要,也是应用非常频繁的一种技术.初学者要是能把IO技术的学透,java基础也就能更加牢 ...
- lazy?
https://developer.jboss.org/wiki/LazyEJB31timerservicedeploymentstartingJBossAS600M5 2016-09-28 18:5 ...