Eclipse 建模级调试
背景: 最近,我一直在使用一个名为的插件,它与EclipseMF一起工作,并从模型生成Java代码,就像EMF一样,但有一些附加功能。软件的静态结构通过UML类图进行建模,其中动态行为(即方法)通过所谓的Story Drvien建模(SDM)进行建模,该建模类似于活动图,但每个节点都包含代码块(实际上,它们包含模仿特定行为的图形转换,但这些转换会转换为生成的代码块) 我想要开发的是一个调试器,它表示在建模级别上的调试,即不同于标准的eclipse jdt调试器,调试器在某个点停止,然后当我们按Stepover时,它会逐行进行。在我的例子中,我想在SDM的不同节点上放置断点,并假设y调试器在一个特定的节点停止,然后当我按步移时,它应该跳到下一个节点,如果我要按步进,它应该进入该特定的节点 伪例子 问题? 我解决这个问题的方法是让eMoflon注入特定的代码片段(比如say//Stop语句)在生成的Java代码中。当代码中遇到//Stop语句时,我与JDT一起工作的调试器插件应该能够暂停Java的执行。现在我已经根据的指导原则实现了一个调试器,但我似乎找不到与JDT通信的方法。这可能吗我在努力做什么 有人告诉我java代码挂起只能通过JDT/Debug完成,如果是这样,那么我可以用标准JDT/Debug复制上述行为,或者用我的插件扩展JDT/Debug功能吗? 如果您已经使用过断点侦听器之类的东西,那么升级到JDT/Debug应该不会太难。一个入口点是class,它允许您创建Java断点,或者添加一个Eclipse 建模级调试,eclipse,debugging,eclipse-plugin,emf,eclipse-jdt,Eclipse,Debugging,Eclipse Plugin,Emf,Eclipse Jdt,背景: 最近,我一直在使用一个名为的插件,它与EclipseMF一起工作,并从模型生成Java代码,就像EMF一样,但有一些附加功能。软件的静态结构通过UML类图进行建模,其中动态行为(即方法)通过所谓的Story Drvien建模(SDM)进行建模,该建模类似于活动图,但每个节点都包含代码块(实际上,它们包含模仿特定行为的图形转换,但这些转换会转换为生成的代码块) 我想要开发的是一个调试器,它表示在建模级别上的调试,即不同于标准的eclipse jdt调试器,调试器在某个点停止,然后当我们按
IJavaBreakpointListener
,它允许您很好地控制当Java断点被命中时应该发生什么
接下来,您可能应该看看中的各种抽象,其中许多是来自平台/调试的类型的专门化(例如,IJavaDebugTarget
->IDebugTarget
,IJavaThread
,IJavaValue
->IValue
)。例如,您可以从IJavaObject
获取其类型,该类型应为IJavaClassType
理解所有这些抽象表示目标JVM中的元素是很重要的,调试器通过这些元素进行对话(参见JDT/Debug中许多实现类中的“JDI”名称前缀).因此,上述概念与JDT/Core中的概念没有直接联系,但您可以使用以下桥接器从JDT/Debug转到JDT/Core:
- 从当前调试目标获取启动的
ILaunchConfiguration
- 从启动配置中检索
- 使用普通的Eclipse机制检索
,然后检索IProject
IJavaProject
IJavaClassType
和一个IJavaProject
,您还可以检索调试器中看到的元素的JDT/Core表示
上面只解释了JDT/Debug的一些功能,以及它与Platform/Debug和JDT/Core的关系。它没有提供实现调试器的完整策略,因此您仍然需要问自己以下问题:
- 我是否希望在读取生成的Java类后以编程方式创建断点
- 我是否要生成(虚拟)调用,以调用预先创建断点的特定已知方法
- 当调试器遇到断点时,如何确定与当前执行相对应的模型元素