使用 CDT 调试器,第 2 部分: 使用 Eclipse CDT 和 MI 访问 gdb
2009-12-19 00:00:00 来源:WEB开发网CDI 和 Eclipse 调试模型
对于与 Eclipse 调试视图(比如 Register View 和 Variable View)交互的调试插件,您必须遵守 Eclipse 的规则:必须使用从 Eclipse 调试平台获得的事件和元素。Eclipse 调试模型的根元素是一个 IDebugTarget,其它元素包括 IVariable、IExpression 和 IThread。这些名称很相似,是因为 CDI 模型层次结构是在 Eclipse 调试模型层次结构之后构造的。但 CDI 模型与 Eclipse 调试模型之间不能直接对话。
鉴于这个原因,CDT 包含一组类,将 CDI 类封装起来,从而将 CDI 模型和 Eclipse 调试模型联系起来。CDebugTarget 是这个包装器模型层次结构的根,它侦听由 CDI EventManager 触发的事件。当它接收到新事件时,CDebugTarget 处理大量的 if 和 switch 语句来决定如何响应。例如,如果 CDI 事件是 ICDIResumedEvent,CDebugTarget 将执行清单 5 中的代码。
清单 5. 将 CDI 事件转换为 DebugEventsswitch( event.getType() ) {
case ICDIResumedEvent.CONTINUE:
detail = DebugEvent.CLIENT_REQUEST;
break;
case ICDIResumedEvent.STEP_INTO:
case ICDIResumedEvent.STEP_INTO_INSTRUCTION:
detail = DebugEvent.STEP_INTO;
break;
case ICDIResumedEvent.STEP_OVER:
case ICDIResumedEvent.STEP_OVER_INSTRUCTION:
detail = DebugEvent.STEP_OVER;
break;
case ICDIResumedEvent.STEP_RETURN:
detail = DebugEvent.STEP_RETURN;
break;
}
CDebugTarget 通过创建 DebugEvents 来响应 CDI 事件,这个过程通常涉及单步调试、中断、重新执行。创建这些事件后,它访问 Eclipse DebugPlugin 并调用 fireDebugEventSet 方法。这通知所有 Eclipse 调试侦听器状态发生了改变。即所有将其自身作为 DebugEventListener 添加的对象接收到 DebugEvent。这包括 Eclipse 调试视图,比如 Memory View 和 Variables View。
更多精彩
赞助商链接