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 ...
随机推荐
- Spring Boot项目的打包和部署
补充一点:搜索了下别人Spring Boot部署方案,大多都说:①packaging设为war:②要添加Spring Boot的tomcat依赖:③修改output路径,但是使用STS新建Spring ...
- mac iterm2配置
iterm2的配置分为如下几个部分: 1. 字体大小的配置: iTerm->Preferences->Profiles->Text->Regular Font: 我在这里设置成 ...
- JSP日期时间转C#
DateTime.ParseExact("Wed Aug 03 16:46:24 CST 2016", "ddd MMM dd HH:mm:ss CST yyyy&quo ...
- vim c++补全
弄了个vim对c++的补全,主要参考自: http://vim.wikia.com/wiki/C%2B%2B_code_completion 首先确定vim编辑.cc或者.cpp文件时当前自动补全 ...
- TaskScheduler的启动
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...
- 如何用VB.Net创建一个三层的数据库应用程序
[b]1.[/b][b]概论:[/b] 本文将介绍如何创建一个三层应用程序,并且将介绍如何创建一个Web Service服务. ADO.NET创建Windows三层结构应用程序的体系架构如下图所示: ...
- XML文件的读写
using System; using System.Collections.Generic; using System.Xml; namespace COMMON { public class Xm ...
- 通过外部配置文件做mybatis的基础配置,以及Mapper代理接口的实现
1.通过外部配置文件做mybatis的基础性的配置. 1)先编写config.properties的文件(做一些动态的配置). 配置的内容如下: jdbc.jdbcUrl=jdbc:oracle:th ...
- 查询目前运行状态-CPU等情况
对目前的数据库的运行状况有一个基本的了解 ) DB_NAME(a.dbid) AS dbname , loginame , spid , cpu , b.text , lastwaittype , w ...
- Unity加载模块深度解析(网格篇)
在上一篇 加载模块深度解析(一)中,我们重点讨论了纹理资源的加载性能.这次,我们再来为你揭开其他主流资源的加载效率. 这是侑虎科技第53篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何 ...