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机制的更多相关文章

  1. eclipse tomcat debug启动慢

    myeclipse或eclipse下debug模式启动很慢,默认模式也是debug,网上找了终于解决, 原因是有eclipse或myeclipse启动debug时自动添加断点,所以必须删除一些东西. ...

  2. JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)

    1.IP简述使用//获取本地主机ip地址对象.InetAddress ip = InetAddress.getLocalHost();//获取其他主机的ip地址对象.ip = InetAddress. ...

  3. Eclipse 的 Debug 介绍与技巧【转载】

    没有任何程序员能够一气呵成的写出没有任何 Bug 的代码,所以很多程序员有相当一部分时间是花费在 Debug 上的,程序调试是每个程序员必须面对的工作.如何使用 Eclipse 进行有效的.尤其是高效 ...

  4. eclipse远程debug

    由于一般比较正规项目,都会有好几个版本,有时候在测试版本的时候,一切都好好的,然后提交到其他版本之后会有各种各样的问题,这个时候如果不能快速准确的定位到问题,那么我们就需要用 eclipse远程deb ...

  5. Eclipse 的 Debug 介绍与技巧

    转载: Eclipse 的 Debug 介绍与技巧

  6. [转]在Eclipse中Debug 为什么显示source not found

    在Eclipse中Debug 为什么显示source not found http://zhidao.baidu.com/link?url=-jna2HB_k2FW72GPbT--5Qg2AWi3Ip ...

  7. 在Eclipse下debug 出现Source not found for ...

    在Eclipse下debug 出现Source not found for ... 在Eclipse下调试Servlet出现了Source not found for XxxAction.execut ...

  8. Eclipse中debug调试java代码一直报Source not found的解决办法

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  9. Eclipse 中 Debug 时鼠标悬停无法查看变量值

    问题描述:Eclipse在Debug模式下,当鼠标移动到某个变量上面时不自动显示该变量对应的值. 解决方法:在Eclipse中点击 Window->Preferences->Java-&g ...

随机推荐

  1. Mysql插入数据为何要加上" ` "(Esc下面那个按键符号)?

    资料上和以前学习的SQL语言,往数据库里面插入数据语句是这样的 INSERT INTO test_table (clo_1, col_2) VALUES("this is value of ...

  2. JSP目录

    JSP目录   课时1    jsp概述和背后原理31:11 课时2    三种jsp的scriptlet语法27:29 课时3    jsp的注释14:00 课时4    JSP4个域对象的作用域3 ...

  3. 【windows 下安装 mysql-server 无法登录问题解决】

    ----------------------------- 无感的首行 ----------------------------- 新版 mysql-server 5.7 安装后发现无法使用 mysq ...

  4. python 类变量 在多线程下的共享与释放问题

    最近被多线程给坑了下,没意识到类变量在多线程下是共享的,还有一个就是没意识到 内存释放问题,导致越累越大 1.python 类变量 在多线程情况 下的 是共享的 2.python 类变量 在多线程情况 ...

  5. C1000k 新思路:用户态 TCP/IP 协议栈

    现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M).实现 C1000k 的常规做法是调整内核参 ...

  6. Oracle数据库迁移到AWS云的方案

    当前云已经成为常态,越来越多的企业希望使用云来增加基础设施的弹性.减轻基础设施的维护压力,运维的成本等.很多企业使用云碰到的难题之一是如何将现有的应用迁移到云上,将现有应用的中间件系统.Web系统及其 ...

  7. 一个CURL

    CURL curl是利用url语法规则来传输文件,数据的工具,主要实现和服务器中网页,资源传输的工具.这里有一个关于感冒还没好的段子. 1.去phpini开启curl扩展,重启阿帕奇或者配置环境变量或 ...

  8. runtime 运行机制

    // //  HKPerson.h //  runtimeDemo1 // //  Created by 123 on 16/5/23. //  Copyright © 2016年 123. All ...

  9. @helper函数使用方法

    这个函数方法,我也是通过别人博客看到的,感觉不错和大家一起学习分享一下. 1.自定义函数方法,只在同一个view视图文件里调用 Controller public ActionResult Index ...

  10. Twitter Bootstrap

    Twitter Bootstrap是一个HTML/CSS/JS框架,适用于移动设备优先的响应式网页开发.主要涉及: HTML:为已有的H5标签扩展了自定义属性 data-* CSS : Reset + ...