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 ...
随机推荐
- 在Mac上搭建本地Apache服务器一些注意点
一般在开发ios程序中,我们需要使用到和服务器的交互操作. 一般我们在Mac上使用Apache来搭建服务器.数据库采用MySQL.在Mac中Apache是自带的.所有,我们可以不需要额外的去Apple ...
- div的一些易出错地方
1.div中放一张图片老是显示不出来? 解决方法如下: 设置一下div的宽度与高度,然而此时直接写width与height是不对的,对于块级元素没有这个属性,只能在style="width: ...
- DEV word文档转换为pdf文件
引用aspose.net控件2.0. docement doc=new document(文件路径和名称); doc.save(输出路径\file.pdf);
- (转)linux下cp目录时排除一个或者多个目录的实现方法
原文链接:http://www.jb51.net/LINUXjishu/88971.html 说明:/home目录里面有data目录,data目录里面有a.b.c.d.e五个目录,现在要把data目录 ...
- struts2中如何使用主题theme
一.什么是主题? 主题就是一种风格化标签,能够让所有UI标签能够产生同样的视觉效果而归集到一起的一组模板,即风格相近的模板被打包为一个主题 二.struts2提供的主题有哪些呢?struts2中如何修 ...
- 17.iOS App设置icon,启动图,App名称的方法
icon:选择Assets-->AppIcon-->将各种尺寸的icon拖拽到相应的框中. APP名称:选择info-->Bundle name,修改APP名字. 启动图: 首先点击 ...
- 实现十进制无符号整数m到十六进制数的转换功能
/*利用顺序栈结构,编写算法函数void Dto16(unsigned int m)实现十进制无符号整数m到十六进制数的转换功能.*//******************************** ...
- 电子科技大学第八届ACM趣味程序设计竞赛第四场(正式赛)题解
A. Picking&Dancing 有一列n个石子,两人交替取石子,每次只能取连续的两个,取走后,剩下的石子仍然排成1列.问最后剩下的石子数量是奇数还是偶数. 读懂题意就没什么好说的. #i ...
- js组件之间的通信
应用场景: 1.在刷微博的时候,滑到某个头像上,会出现一张usercard(用户名片), 微博列表区有这个usercard, 推荐列表也有这个usercard,评论区也有. 2.在网上购物时,购物车安 ...
- html或者jsp页面引用jar包中的js文件
一,页面上引用jar包中的js文件的方法 使用java web框架AppFuse的时候发现,jquery.bootstrap等js框架都封装到jar包里面了.这些js文件通过一个wro4j的工具对其进 ...