使用 CDT 调试器,第 1 部分: 了解 C/C++ 调试器接口
2009-12-19 00:00:00 来源:WEB开发网当启动调试器时,Eclipse 将检查调试器的 platform 和 cpu 元素是否支持处理环境。如果支持,它将检查以确保当前的启动模式受调试器的 mode 元素支持。如果通过所有检查,Eclipse 将查找 class 字段中标识的类。这个类必须实现 ICDIDebugger2 接口,因此必须提供 createSession() 方法的实现。
createSession() 的目标是构建一个可以实现 ICDISession 接口的对象。这个对象使 CDT 能够在运行时访问调试器。这种访问通过一些方法提供,其中最重要的三个方法如下所示:
getSessionProcess() — 返回运行调试器的进程
getTargets() — 返回调试目标数组
getEventManager() — 返回添加和删除事件侦听器的管理器对象
第一种方法十分简单,它将返回与调试器可执行文件相对应的 Process 对象。接下来的两种方法 getTargets() 和 getEventManager() 则较为复杂;本文稍后将介绍这些内容。由于这些方法依赖于调试器可执行文件,而示例插件没有提供这些文件,因此 ExampleDebugger 类将这些方法留空。
目标、事件和 CDI 模型
当 CDT 调用 getTargets() 时,会话必须为每个要调试的进程提供一个 ICDITarget。ICDITarget 的任务是接收调试命令,为调试器转换这些命令,然后发送给调试器。例如,当单击 CDT 调试透视图中的 Step 或 Resume 按钮时,CDT 将分别调用目标的 stepOver() 或 resume() 方法。CDI 对调试器目标接口如何工作没有具体要求,但是第 2 部分将解释 gdb 如何使用 MI 协议与目标交互。
除了向目标发送命令外,ICDITarget 还向任何希望接收调试器输出的对象传输调试器输出。这将通过 CDI 事件完成,这里将使用会话的 getEventManager() 方法。当需要向任何 CDI 对象(例如一个 RegisterView)通知调试器事件时,它将调用 getEventManager() 以访问会话的 ICDIEventManager。然后调用管理器的 addEventListener() 方法,以将该方法添加为侦听器。当调试器生成输出时,目标调用管理器以通知所有侦听器。管理器通过调用每个侦听器的 handleDebugEvents() 方法来完成这个目的,而这个方法必须通过所有 ICDIEventListener 来实现。
更多精彩
赞助商链接