将Eclipse Workbench UI与GNU调试器功能连接起来

1 eclipse gdb interaction eclipse-cdt

我想知道Eclipse Workbench UI如何与GNU调试器通信.我的意思是在Eclipse for C/C++中,当我们按下菜单中的步骤或继续或继续按钮时,幕后会发生什么?如何调用GNU gdb?gdb如何知道要执行哪个函数?UI如何与gdb通信?我已经为gdb添加了一个自定义函数(无论函数是什么......)我想在Eclipse工作台中添加一个按钮,按下按钮将特别调用gdb和该函数.我想知道Eclipse workbench UI如何与GNU gdb交互.我该怎么做呢?

谢谢,罗希特

Von*_*onC 5

请参阅" 使用Eclipse CDT和MI访问gdb "一文.

GNU调试器(gdb)是最常用的开源调试器.它通常用作命令行可执行文件,但可以使用鲜为人知的MI协议通过软件访问它.

  • C/C++调试器接口(CDI)由Eclipse/CDT开发人员创建,因此CDT可以访问外部调试器.
  • 机器接口(MI)由gdb开发人员创建,因此外部应用程序可以访问gdb.

在许多情况下,MI结果记录之后是(gdb)和带外(OOB)记录.这些记录提供有关目标状态或调试环境的其他信息.
-exec-step之后的*stopped消息是一个OOB记录,它提供有关断点,观察点以及目标已暂停或完成的原因的信息.
在上一个会话中,gdb在每个-exec步骤之后返回*stopped,reason ="end-stepping-range"以及目标的状态.

gdb/MI很难让人理解,但它非常适合软件进程之间的通信.
CDT通过创建发送和接收数据的伪终端(pty)来实现此通信.然后,它启动gdb并创建两个会话对象来管理调试数据.

只有在使用适当的调试数据更新Eclipse的图形显示时,MI-CDI-wrapper-Eclipse通信才有用.

替代文字

右键单击"信号视图"中的条目时,"使用信号恢复"上下文菜单选项可以继续执行目标并将选定的信号发送到进程.
这个选项调用了SignalsActionDelegate.
选择此选项后,委托调用CDI目标以使用与ICDISignal所选信号相对应的方式恢复执行.
目标为信号创建MI命令并调用MISession.postCommand(),该命令将命令发送到gdb.

当gdb响应时,更新信号视图的过程需要五个步骤:

  1. MISession分析来自gdb的MI输出,并确定是否正在改变信号设置.如果是这样,它将触发MISignalChangedEvent.
  2. CDI EventManager侦听MISignalChangedEvent并通过创建CDI事件来响应:ChangedEvent.然后它会触发事件并警告所有ICDIEventListeners.
  3. CDebugTarget从EventManager接收事件,并确定ChangedEvent是否与信号更改有关.如果是这样,它会调用其CSignalManager来处理CDI事件.
  4. CSignalManager更新其模型元素并触发DebugEvent,其类型由DebugEvent.CHANGE给出.
  5. SignalViewEventHandler接收DebugEvent,检查以确保它处理信号,并刷新信号视图.

了解信号视图的相关操作非常重要,原因有两个:

  • 它是不同模型元素如何协同工作的具体例子
  • 它展示了如何构建与Eclipse,gdb和CDI交互的类似视图.

结论

  • 两个会话对象(MISessionSession),
  • 两个目标(CDebugTargetTarget),和
  • 两个完全不同的模型元素层次结构