- 浏览: 987502 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
三、断点的管理
要支持调试,断点的支持是不可少的。Eclipse里,断点通常是显示在Editor的左边的ruler上。可以通过双击增加和删除。断点类需要自己提供,一般每个断点都会含有一个对应的Marker,用来记录这个断点,这样在Editor下次再打开的时候断点还能存在。
断点的追加、删除等等操作,都是通过断点管理器来实现的。可以通过以下方式得到断点管理器:
DebugPlugin.getDefault().getBreakpointManager();
四、事件交互
调试时的事件交互一般是通过Socket连接来完成,而且一般有两个连接:一个是发送命令用的Socket;另一个是接收事件用的Socket。
理解起来就是这样的:由UI端发出的并等待返回的连接都由一个Socket来执行;由后台自动发出的事件由另一个Socket连接来完成。所谓后台自动发出,是指不需要UI端参与的、UI端未知的事件,例如运行到了某处,终止等等。
一般来说,所有的调试动作或者是对断点的操作,都是由事件交互来完成的,例如单步跳过,可能需要发送一个“stepOver”,然后由后台执行完这个操作,再把结果返回;
这里有一点需要介绍清楚。
我们通过发送命令的端口发出命令,并得到返回,这个返回结果只是用来修改我们的模型对象(也就是堆栈中的各个结点对象),事实上此时堆栈本身并不会更改,之前我们说堆栈的形成是Eclipse自动调用那些get**s()方法而产生的。这有点不准确,其实也是事件驱动而产生的,只是这个事件不是由我们从UI上发出的,而是后台自动发出的。例如:
我们发出一个“stepOver”命令,然后得到一个返回,这个返回结果然后就更新了模型,不过这个模型现在还没有立即更新树;在后台给我们返回结果的同时,它又通过那个事件端口发出一个事件,例如一个“stepOver”字符串。
然后我们得到这个字符串,再发出一个Eclipse事件:DebugEvent.STEP_OVER然后就会驱使堆栈树的更新。
也有可能UI端发出“stepOver”命令,从后台返回的事件不是一个“stepOver”事件,例如没有断点的时候应该就是终止了。UI端只是发出命令,它不知道这个命令发出后具体执行情况,这也就为什么需要由后台来决定具体的事情类型的原因。
这里出现DebugEvent.STEP_OVER可能有点莫名。不过我们只要理解在Eclipse调试里,要想更改堆栈树的显示、Variable的结果,我们就需要发出一个事件,这些事件已经在DebugEvent对象里定义好了,如下:
static int |
BREAKPOINT |
static int |
CHANGE |
static int |
CLIENT_REQUEST |
static int |
CONTENT |
static int |
CREATE |
static int |
EVALUATION |
static int |
EVALUATION_IMPLICIT |
static int |
MODEL_SPECIFIC |
static int |
RESUME |
static int |
STATE |
static int |
STEP_END |
static int |
STEP_INTO |
static int |
STEP_OVER |
static int |
STEP_RETURN |
static int |
SUSPEND |
static int |
TERMINATE |
static int |
发出事件是由DebugElement里的fire**Event()方法来完成的。它定义了对应于各个事件类型的不同的发出事件方法。
五、源码查看的支持
我觉得源码查看和断点支持是所有其他操作的基础,否则使用Eclipse框架就失去了意义了。
要支持源码查看,我们需要完成几件。
我们先回到org.eclipse.debug.core.launchConfigurationTypes扩展点。之前launch的实现中有两个属性没有涉及:sourceLocatorId和sourcePathComputerId
要支持源码查看,我们就需要把这两个属性填上。sourceLocatorId对应于一个org.eclipse.debug.core.sourceLocators实现的ID;sourcePathComputerId对应于一个org.eclipse.debug.core.sourcePathComputers实现的ID。
所以显然,我们也应该实现扩展点:org.eclipse.debug.core.sourceLocators和org.eclipse.debug.core.sourcePathComputers
分别用来定义查找的文件名,和查找到文件所在的容器。具体到哪一行我们不需要提供。因为我们在StackFrame实现里有一个返回当前行的方法,Eclipse会自动高亮到对应的行。
六、自定义变量的显示方式
Variable视图有两层。所谓的显示方式,是指在Variables视图上,当我们在上层选择一个变量的时候,会在下层也显示这个变量的内容。这里的自定义就是定义下层的显示方式。
要定义上层的显示方式,我们需要扩展一个扩展点:
org.eclipse.debug.core.logicalStructureTypes
要定义下层的显示方式,需要扩展:org.eclipse.debug.ui.detailsPaneFactories.
我们要知道下面那个显示面板在Eclipse里被称为detailsPane。所以我们实际上,需要再自己写一个DetailsPane的实现类,用以提供显示。
扩展以上两个扩展点,定义自己的实现即可。
但是扩展的时候我们就会发现,它需要指一个“modelIdentifier”,这样一个属性,这个属性值需要指定为一个“org.eclipse.debug.ui.debugModelPresentations”扩展点的ID,这个“org.eclipse.debug.ui.debugModelPresentations”扩展点,在上面我们提到过,可以用于自定义堆栈的显示,例如image、label等。
等等,我们先理清一下思路:
1. 我们要实现自己的显示堆栈的方式,我们需要扩展:org.eclipse.debug.ui.debugModelPresentations
2. 我们要实现自己的显示Variable的方式,我们需要扩展:org.eclipse.debug.core.logicalStructureTypes和org.eclipse.debug.ui.detailsPaneFactories
3. 所有的东西都需要与org.eclipse.debug.ui.debugModelPresentations关联。这里所说的所有的东西包括:
堆栈中的各个层级类型,这个关联是通过它们的父类DebugElement的getModelIdentifier()方法来决定的。我们想想为什么需要这个关联:
因为这样调试的时候,Eclipse才能找到对应的显示方式,要不只能用缺省的了。
org.eclipse.debug.core.logicalStructureTypes扩展中需要指定“modelIdentifier”的值,这就表示当前的扩展用在这个调试模型上。
OK,这样我们就完成了自定义变量的显示方式。
七、其他事项
1. 多线程问题
我们要注意多线程的竞争问题,例如发送命令时,应该保证Socket一次只被一个线程使用。等等。
2. 启动和加断点
运行的情况下无所谓,启动即可运行。但是在调试的时候,我们必须有一种保证在运行前能设置社始断点的方法。否则可能在断点追加之前就已经运行完了。
3. 事件顺序
我们可以加多个事件,这些事件在socket中排队发送,因为可能会有顺序的问题,我们应该保证顺序的正确性。
4. 其他问题
再想
评论
http://surenpi.com
别人都设计好的,咱们只是用用。。。
学习的时候加入自己的思考,思路清晰,难得。而且,好像中文的文档中,很少有研究这个的,研究了还能表述这么好,转化为自己的东西。很好。一般介绍技术的,看完都是糊里糊涂的,你这文章看着很清晰,能很快理解。非常好啊。
要多向大牛学习。
别人都设计好的,咱们只是用用。。。
厉害
大牛啊
nb
发表评论
-
在OSGI容器Equinox中嵌入HttpServer
2011-12-27 18:01 10747简单介绍一下如何在一个osgi的bundle中内嵌使用http ... -
GEF中用鼠标移动画布
2011-12-27 13:37 1357第一步 增加Palette项: moveTool = n ... -
在Eclipse中使用Maven
2011-09-29 13:41 1266上一篇讲了Maven的基础知识,这一篇讲怎么在Eclipse里 ... -
增加Table的Column右键菜单
2011-03-15 15:55 1472table.addListener(SWT.MenuDete ... -
RGB与HSB之间的相互转换
2010-10-29 15:14 12347[引用:] [ http://www.missyuan.com ... -
给Table和Tree的Header加右键菜单
2010-10-29 11:26 2517通常,如果不做特殊处理的话,在表头(树头,以下统称表头)的上点 ... -
给Editor加上Annotation
2010-10-27 17:27 2759要自定义Annotation,需要实现以下扩展点: “ ... -
org.eclipse.ui.navigator.linkHelper的使用
2010-08-06 15:43 2409org.eclipse.ui.navigator.linkHe ... -
让表项支持鼠标拖动移位,并自动滚动滚动条
2010-04-07 11:43 2678设想我们有一个表,表中有很多数据(多到竖起滚动条至少要出现)。 ... -
Eclipse截屏插件
2010-01-19 15:59 2729闲来无事,就写了一个截屏插件,见附件,直接放在eclipse的 ... -
Eclipse取得路径的方法
2009-11-27 10:30 1904从插件中获得绝对路径: TestPlug ... -
实现自己的团队协作客户端一
2009-11-12 15:04 1420在Eclipse里自带了团队协 ... -
扩展Eclipse Java编辑器的链接功能
2009-09-09 09:35 3611在JDT中,可以在一个类,或者是方法,或者是变量上进行跳转。这 ... -
添加监听到EMF对象、加密保存
2009-08-14 10:10 984一、可以注册监听来获取EMF模型改变事件,例如: pu ... -
使用Tab键实现表格的跳转
2009-08-12 21:29 2988在Excel中,如果按Tab键,则焦点会在相邻的方格中不断的跳 ... -
StyledCellLabelProvider的应用
2009-08-11 16:47 2272昨天写了EditingSupport的应用,可以方便的编辑Ta ... -
EditingSupport的应用
2009-08-10 15:20 2965Eclipse3.3中提供了一个EditingSupport类 ... -
合理的自定义扩展点
2009-06-26 01:43 1799Eclipse中提供了各种各样的用于扩展Eclipse功能的 ... -
关键字高亮插件
2009-06-26 00:59 1925在eclipse中,如果用Ctrl+F来进行查找,它只会一个一 ... -
置窗口于显示器中央
2009-05-06 09:46 921要把窗口置于显示器的中央,也是很容易的。如下: ...
相关推荐
《基于Eclipse的开源框架技术与实战》源代码是一份涵盖了多章节的编程学习资源,主要针对使用Eclipse集成开发环境进行开源框架的应用和技术实践。由于文件量较大,该资源被分成了三个部分进行上传,其中包括了从第2...
总的来说,JavaScript Eclipse调试插件是提高JavaScript开发效率和质量的关键工具,通过它,开发者可以更好地理解代码运行状态,快速定位和解决问题,从而提升开发工作的专业性和生产力。对于任何使用Eclipse进行...
为了更好地学习Eclipse插件开发,可以加入相关的Java学习群组,例如文档中提到的“Java学习群:***”,在其中可以与首席架构师以及其他学习者交流心得、共享资源,甚至能够免费接受首席架构师的讲课,这些都是非常...
本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...
在本文中,我们将深入探讨如何使用Eclipse IDE搭建一个基于SSH2框架的开发环境。SSH2,即Struts2、Spring和Hibernate的组合,是一种流行的Java Web应用开发框架,能够帮助开发者快速构建高效、可维护的系统。我们将...
CAS(Central Authentication Service)是基于Java的一个开源身份验证框架,主要用于实现单点登录(Single Sign-On,简称SSO)。在本文中,我们将深入探讨如何在Eclipse环境中调试和运行CAS-server的源代码,以便...
在标题提到的"eclipse调试hadoop2.x必备"中,关键点在于调试配置。在Eclipse中,我们可以通过以下步骤创建Hadoop的远程调试配置: 1. **新建运行配置**:选择"Run Configurations",然后在左侧树形菜单中选择...
- 导入JDK的src.zip包可以帮助我们更好地理解和调试代码。 #### 第二步:创建项目并配置 1. **创建Web项目**: - 打开Eclipse,创建一个新的Web项目(File -> New -> Dynamic Web Project),并为其命名。 2. *...
本文将详细介绍如何使用Eclipse来跟踪和调试Android源代码,包括应用层和框架层,这对于提升开发效率和解决复杂问题至关重要。 1. **导入Android源码到Eclipse** - 首先,你需要获取Android源码,通常可以从...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java开发中广泛...通过这个小例子,你可以深入理解SSH框架的整合方式,学习如何在Eclipse中搭建、运行和调试SSH应用,这将为你的Java Web开发能力打下坚实基础。
《Android的应用程序框架与Eclipse开发应用程序入门》一书,为初学者提供了全面的指导,尤其适合在校大学生和想要涉足Android应用开发的程序员。本文将深入解析Android应用程序的基础框架,并以HelloActivity为例...
【SSH2框架搭建详解】 ...这个过程对于理解MVC架构和Java Web开发的流程至关重要,同时也为后续深入学习其他高级功能奠定了基础。通过这样的实践,开发者可以更好地掌握Java Web应用的开发和调试技巧。
通过分析和运行这些文件,开发者可以学习到SSM框架的实际运用,了解如何在Eclipse环境中搭建和调试SSM项目。 总结,"eclipse的ssm框架例子"是一个实用的学习资源,它涵盖了从项目结构配置到具体功能实现的全过程,...
Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目涉及到的知识点涵盖了Java Web开发中常用的三个框架技术,即Struts2、Spring和Hibernate。这个教程旨在指导开发者如何将这三种技术整合在一起,构建一个Web...
2. **插件体系结构**:学习Eclipse插件开发首先要了解OSGi(Open Services Gateway Initiative)框架,它是Eclipse插件运行的基础。理解Bundle(模块)的概念,以及如何创建、配置和管理它们。 3. **开发环境搭建**...
### Eclipse调试器和Debug视图知识点详解 #### 一、Eclipse SDK与内置Java调试器 **Eclipse SDK**(Software Development Kit)是专为Java开发设计的一个强大平台,其中包括了JDT(Java Development Tools)组件,...
Eclipse的调试器将帮助你查看变量值、设置断点和步进执行代码,这对于理解Caffe的工作原理和调试问题非常有用。 通过以上步骤,你可以在Eclipse环境中顺利地构建、运行和调试Caffe项目。对于深度学习开发者来说,...
本教程将围绕使用Eclipse IDE来搭建SSH框架进行详细讲解,以帮助初学者更好地理解和掌握这一技术栈。 首先,我们来了解SSH框架的基本概念: 1. **Struts**:这是一个基于MVC(Model-View-Controller)设计模式的...
在这个项目中,开发者使用Eclipse来编写、编译、运行和调试SSH框架的代码。 7. **源码结构**:一个典型的SSH项目源码会包括以下部分:Struts2的配置文件、Spring的配置文件、Hibernate的配置文件、实体类(Entity)...
对于“Eclipse与插件安装 - 我的人生我的梦.htm”和“使用 Easy Struts for Eclipse 开发 Struts.files”这样的文档和资源,它们可能包含了更详细的步骤说明或示例代码,读者可结合这些资料进一步理解并实践上述操作...