使用 CDT 调试器,第 1 部分: 了解 C/C++ 调试器接口
2009-12-19 00:00:00 来源:WEB开发网CDI 提供了一组标准的 ICDIEvent。每个调试器在调试环境中的响应或修改必须被打包到以下内容中:
ICDIBreakpointMovedEvent 当用户选择新断点时触发ICDIChangedEvent 当目标的某个元素(例如变量、注册表或部分内存)的值发生改变时触发ICDICreationEvent/ICDIDestroyedEvent 当创建或删除某个对象(例如断点)时触发ICDIExitedEvent 当程序终止时触发ICDIRestartedEvent/ICDIDisconnectedEvent 当目标重启或断开连接时触发ICDIExecutableReloadedEvent 当重新加载程序(例如在新的构建之后)时触发ICDISuspendedEvent/ICDIRestartedEvent/ICDIResumedEvent 当可执行文件停止、重启或重新执行时触发
本系列第 2 部分将详细介绍 gdb 输出如何转换为 MIEvent 以及 MIEvent 如何成为 ICDIEvent。
ICDIChangedEvent 非常重要,因为它在目标每次改变时都触发。目标的每个可修改的方面都使用一个 ICDIObject 表示,并且这些对象组成了一个称为CDI Model 的层次结构。它们包括 ICDIRegister、ICDIVariable、ICDIMemoryBlock、ICDIThread 等等。ICDITarget 是这些 CDI Model 对象的根和容器。每个 ICDIObject 必须实现的惟一方法是 getTarget()。
CDI 断点和检查点
控制调试器的两种最重要的方法是使用断点和检查点。当达到某个特定位置或满足某个条件时,断点将暂停调试器。当读取或写入某个特定变量时,检查点将暂停调试器。CDI 提供两个接口来呈现这些方法:ICDIBreakpoint 和其子接口 ICDIWatchpoint。ICDIBreakpoint 可以是长期的、临时的或硬件支持的;而 ICDIWatchpoint 可以是读类型、写类型,或者同时具备两种类型。
您可以通过 ICDIBreakpointManagement 的实例创建或删除断点和检查点。这将涉及很多相关的方法,例如 setLineBreakpoint()、deleteBreakpoints() 和 setWatchpoint()。但是需要注意,org.eclipse.debug.core 插件的插件类提供了它自己的断点管理器 IBreakpointManager,您可以通过 DebugPlugin.getDefault().getBreakpointManager() 访问。在很多情况下,您可能需要访问并将 IBreakpoint 转换为 ICDIBreakpoint。
结束语
从头构建图形化调试环境是一项非常浩大的工程:您不仅需要详细了解目标处理程序,还需要与调试器通信并将其输出传递给一个图形化用户环境。对于那些非专业人员来说,Eclipse 提供了一个可以将定制调试器添加到 CDT 框架的 API,这个 API 称为 C/C++ Debugger Interface(CDI),本文介绍了它的基本操作和使用。“使用 CDT 调试器” 系列文章的第 2 部分将解释 CDT 如何使用 CDI 与最优秀的开源调试器进行交互:GNU Debugger(gdb)。
更多精彩
赞助商链接