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

时间:2009-06-08 19:25:27

标签: eclipse gdb eclipse-cdt interaction

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

谢谢, 罗希特夏尔

1 个答案:

答案 0 :(得分:5)

请参阅“Accessing gdb with the Eclipse CDT and MI”文章。

  

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通信才有用。

alt text

  

右键单击“信号视图”中的条目时,“使用信号恢复”上下文菜单选项可以继续执行目标并将所选信号发送到流程。
  此选项会调用SignalsActionDelegate   选择此选项后,委托调用CDI目标以使用与所选信号对应的ICDISignal继续执行。
  目标为信号创建MI命令并调用MISession.postCommand(),它将命令发送到gdb。

     

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

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

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

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

    结论

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