GDB 的MI接口

时间:2021-12-17 06:44:10

背景介绍:

libgdb过时了,目前的GDB调试前端都不用libgdb

目前有两种比较流行:
- MI接口,现在应该是MI II接口,是Eclipse CDT所采用的方式
- emac输出接口,这个似乎有更多的调试前端所采用,例如DDD,kdbg,codeblocks等等

另外还有一种比较另类的一种方式:insight,直接把gdb给包含进去了

MI不但包括了CLI的所有命令,还具备一些CLI所不提供的功能,也就是说MI的命令一般与gdb的命令有一个映射的关系。当然,MI接口的设计初衷是面向将 GDB作为系统组件之一的复杂系统。在类似于DDD,Insight等以GDB为后端(backend)的GUI debugger的实现中,就是充分利用了GDB MI接口。MI最大的不足在于其输出的文本流接口比较复杂,必须很熟悉其输出格式才能理解,不如CLI输出直观。

 
简单地说,GDB MI interpreter 接受字符串形式的命令输入,然后产生一行表示命令执行结果的输出。当然,这里的输入命令和输出记录都有严格的格式和内容定义。而且,根据命令的不同(同步 命令或异步命令),GDB的输出也代表不同的含义。当利用GDB MI实现一个GUI的debugger时,通常的做法是使用一个进程负责管理GDB,将GDB作为其子进程派生出来后,接管其标准I/O,并通过pipe 向GDB注入MI命令,并接收GDB MI输出。自然,该进程的另一个工作就是与GUI前端交互,完成GUI命令解析以及返回相应record. Simple?:-)
 
Insight使用Tcl/tk实现前端GUI,DDD使用的则是Gtk。前段时间正好学习了Python,是不是可以用Python+GDB MI来作一个GUI Debugger?正好还可以复习一下前一阵子看过的程序link and load 过程。
 
注:GDB MI的详细介绍参见GDB 手册: Debugging with GDB.其中专门一章讨论MI接口。

MI(翻译为Machine Interface)。因为最近在用Eclipse的CDT调试C/C++,当然Eclipse本质gdb的调用,对于gdb的命令很多人可能都已经很熟悉了,本文介绍的mi层命令可能很少有人用到,它也是gdb的一部分,主要目的是为一些目标系统如IDE等提供调试功能,如eclipse下c/c++的cdt插件的底层就是调用的mi层命令,cdt的包里面有两个类RxThread,TxThread就是一个发送mi命令,一个接收返回数据的,大家有兴趣可以研究下。

进入命令 gdb --interpreter mi [exec_file]

退出命令 quit

mi的命令总共分为以下几个部分:

1.断点(Breakpoint)

2.程序环境(Program Context)

3.线程(Thread)

4.程序执行(Program Execution)

5.栈(Stack)

6.变量(Variable)

7.数据(Data)

8.跟踪点(Tracepoint)

9.符号(Symbol)

10.文件(File)

11.目标数据(Target Manipulation)

12.其它杂项

像我们在Eclipse 的console上见到的-var-evaluate-expression,-stack-list-locals,-exec-continue 诸如此类的都是mi的命令。

references:

http://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_211.html#SEC216

http://jlspyaozhongkai.blog.163.com/blog/static/116057464200995103415205/

http://blog.csdn.net/coutcin/article/details/1074330   (一些mi命令详解可以参考这里)

http://www.ibm.com/developerworks/cn/opensource/os-eclipse-cdt-debug1/

http://www.ibm.com/developerworks/cn/opensource/os-eclipse-cdt-debug2/

GDB 的MI接口的更多相关文章

  1. Visual Studio 2015中使用gdb远程调试linux程序

    VS的debug功能非常强大,相比而言linux上的图形化调试一直不是很好用. 如果可以使用VS来调试linux程序,应该是一件比较愉快的事情. 这在2015中变得可能,因为从2015开始VS支持An ...

  2. IP多媒体子系统(IP Multimedia Subsystem,IMS)

      目录 1 什么是IP多媒体子系统[1] 2 IMS产生的背景[2] 3 IMS的特点分析[3] 4 IMS中的功能实体[3] 5 IMS中的接口和协议[3] 6 参考文献 [编辑] 什么是IP多媒 ...

  3. Go+sublime text3的环境搭建

    1.安装Go语言. .msi下载地址:http://download.csdn.net/detail/u014075041/9555543 根据提示安装成功! 在命令行中执行 go env   有提示 ...

  4. AMAB interconnector PL301(二)

    1)Frequency Conversion Components:包含三种component. AXI-AXI async bridge:拥有两种mode:bypass mode 和 async m ...

  5. AMBA interconnector PL301(一)

    HPM(High-Performance Matrix)是一个自生成的AMBA3 bus subsystem. 由一个AXI bus matrix,Frequency Conversion Compo ...

  6. macos 下通过sublime text 3 + gosublime+sublimegdb 开发注意事项

    1.macos系统10.13.4下 安装gdb8.0可以正常调试,而gdb8.1不能正常调试,需要跳过这个坑 2.需要对gdb 8.0进行软件签名 3.通过gosublime 运行(cmd+b),添加 ...

  7. Sublime Text 2搭建Go开发环境,代码提示+补全+调试

    本文在已安装Go环境的前提下继续. 1.安装Sublime Text 2 2.安装Package Control. 运行Sublime,按下 Ctrl+`(`在Tab键上边),然后输入以下内容: im ...

  8. CentOS 上使用vscode 调试百度大数据分析框架Apache Doris BE

    A: 前期准备工作 1. 安装vscode,详细请参见vscode官网https://code.visualstudio.com/docs/setup/linux,摘要如下: sudo rpm --i ...

  9. Sublime Text 2搭建Go开发环境

    Sublime Text 2搭建Go开发环境,代码提示+补全+调试 cceevv · 2014-10-11 00:00:06 · 10496 次点击 · 预计阅读时间 3 分钟 · 5分钟之前 开始浏 ...

随机推荐

  1. Javascript语法去控制Web控件的Enabled属性

    Web控件当使用Enabled属性时,它生成html之后会变成了disabled了.我们为了能够在javascript去控制控件的禁用与启用,得从这个disabled入手.如:

  2. iOS开发之网络数据解析--中文输出

    对于服务器返回的数据,解析之后直接打印,如果数据中原本有中文,可能会出现中文乱码的结果: 为了避免这个问题,可以通过类别来重写系统和打印相关的方法. 步骤: 1.新建文件名:Foundation+Lo ...

  3. 使用Oracle安装账户登录数据库

    如果Linux或Unix平台,安装了Oracle,而且有root账号,则使用“su Oracle安装账户”的方式,sqlplus登录到数据库,这种方式是最可靠的.正如@dbsnake所说,”主要是Or ...

  4. FFmpeg编译iOS静态库

    第一步:下载gas-preprocessor 1.1 下载https://github.com/libav/gas-preprocessor 1.2 拷贝 gas-preprocessor.pl 到 ...

  5. ansible之一:安装与配置

    ansible特点: 1.不需要安装客户端,通过sshd去通信 2.基于模块工作,模块可以由任何语言开发 3.不仅支持命令行试用模块,也支持yaml格式得playbook 4.支持sudo 5.有提供 ...

  6. 3.20 总结 java程序流程控制

  7. pom文件

    groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找. groupId一般分为多个段 ...

  8. 连接字符串配置在App.config中

    <?xml version="1.0" encoding="utf-8"?> <configuration> <connectio ...

  9. diskcache

    DiskCache: Disk Backed Cache DiskCache is an Apache2 licensed disk and file backed cache library, wr ...

  10. Windows Phone开发手记-WinRT下分组拼音的实现

    Windows Phone版本号自升入8.1以来,开发者就多了一个选项,开发基于WinRT架构的WP或者Universal Windows App.然而开发框架转为WinRT后,很多原有的WP8基于S ...