gdb入门的话,先看看我这个博客
gdb入门教程大全(清晰明了)_标biao的博客-CSDN博客
gdb mi接口协议有3个版本 GDB/MI Development and Front Ends (Debugging with GDB)
与gdb版本对应关系如下:(gdb指的是gdb.exe(文中简称为gdb),而gdb mi指的是和gdb.exe进行通信的通信协议)
新版本gdb照样兼容旧版本的gdb mi协议, 但是旧版本gdb当然用不了新版本的gdb mi协议。
我建议用旧版本的gdb mi协议,因为,无论旧版本的gdb还是新版本的,都能成功使用。因为在嵌入式开发中,往往用的gdb都是版本多种多样,而且往往都比较旧(比如我的桌面程序开发gdb就是10.2版本,但是嵌入式gdb版本是7.10,版本差别很大,导致有些高版本的gdb mi命令在嵌入式gdb就用不了,下面的示例将会看到这一点)。
旧版本的gdb mi接口官方手册网址:(5.1版本)
Debugging with GDB - Table of Contents 关于整个gdb的
Debugging with GDB - GDB/MI 里面的gdb mi这部分的
精简的的中文参考博客 GDB/MI 层命令介绍_coutcin的博客-CSDN博客
该作者对该文档进行了大致翻译 GDB/MI 命令总结_哭哭啼的博客-CSDN博客_gdb mi
官方网址:GDB/MI (Debugging with GDB)
进入旧版的教程网站:Debugging with GDB - GDB/MI
主要内容分为如下几部分:命令非常少,学一下就行了。如果功能不够的话,那就混合着用一些gdb cli命令吧,参考本文开头说的这个博客:gdb入门教程大全(清晰明了)_标biao的博客-CSDN博客
注意:
GDB/MI Variable Objects 表示对变量,表达式,内存,寄存器创建一个变量对象(也叫观察对象),相当于调试时候的添加监视功能。这样gdb就能输出一个嵌套结构体变量的层级结构了,这个在IDE中非常有用。如果我们只是利用 Debugging with GDB - GDB/MI Stack Manipulation 章节的-stack-list-locals命令,是不能打印出复合结构体的层级数据的。注:必须先创建对象,不创建直接用这个变量名打印孩子变量会报错的。
这里旧版本:指5.1版本的gdb mi协议,新版本指9.1版本的gdb mi协议
-break-insert [ -t ] [ -h ] [ -r ] [ -c condition ] [ -i ignore-count ] [ -p thread ] [ line | addr ][xx]代表可选项。
语义:-t 插入一个临时断点
-h 插于一个硬件端点
-r 插入一个正则断点,当函数名匹配正则表达式时有效
-c 插入一个条件断点
-i 插入一个指定无效次数的断点
在Debugging with GDB - GDB/MI的数据操作这一章节 Debugging with GDB - GDB/MI Data Manipulation
mi模式下,cli模式的命令照样可以正常输入,反馈的信息就是“~”开头的了
-data-disassemble
寄存器操作:
-data-list-register-names 查询所有的寄存器名字列表 -data-list-register-values 查看指定寄存器的值等
-data-read-memory
关于输入命令详情:Debugging with GDB - GDB/MI Input Syntax,输出信息详情:Debugging with GDB - GDB/MI Output Syntax
它们能在mi接口模式下混合输入(所以如果mi接口提供的命令的功能还不够,那么我们就输入cli模式的命令吧(这个命令就特别丰富了,功能非常强大,看本文开头引入的那个参考博客即可),也是可以的,但是一般常用的调试功能,mi接口提供的命令的功能就够了)。
认真读一读官方mi接口命令的网页,很清晰的,重要点介绍如下:
cli模式下,还能看一个嵌套结构体的值展开 Data (Debugging with GDB)
gdb还有一些其它接口,比如tui接口,这个是图形化接口,可以文本形式图形化出来界面,但是mi接口模式开启后,这些接口的命令很多都会执行失败了,所以mi接口只兼容cli模式的命令(这个也称为标准命令,或者说控制台console解释器)。此外,其实就算在cli模式下,仍然可以用mi模式命令,但是得加一个 interpreter-exec mi "-data-list-register-names" 类似这样使用。Interpreters (Debugging with GDB)
提醒:如果mi接口模式的命令功能不够用了(比如我们就想直接显示gdb反馈信息给用户看,所以mi命令就不合适了),我们就用cli接口模式的命令,这个去看官方对应gdb文档就行,非常详细,gdb文档哪个版本都可以 Top (Debugging with GDB) 建议看本文开头引入的那个参考博客,因为是总结性的
这个是命令大全(里面还显示这些命令是否是mi模式命令),一个网页全部展示,方便我们快捷搜索的,做的真好