GDB 调试模型
主要又两种调试模型:
- 本地调试:调试程序和被调试程序运行在同一台电脑中。
- 远程调试:调试程序运行在一台电脑中,被调试程序运行在另一台电脑中(或者嵌入式开发板)。红线表示GDB(也叫host)与GdbServer(也叫target)之间通过串口线或者网络进行通讯(GdbServer会进行端口监听,比如3333,GDB进行remote target 3333这样进行连接上),用于传输GDB 调试消息的通讯协议可以称为GDB Remote Serial Protocol(GDB RSP)。GDP RSP 报文主要包括四个部分,固定的开始字符(’$’)和结束字符(’#’),中间的调试消息数据以及最后的校验和。可参阅文档:Howto: GDB Remote Serial
注意:就算GDB和被调试程序在一台电脑上,我们仍然可以采用这种远程调试的方式。
GDB 调试功能
GDB 主要有2种调试功能:
- gdb program:使用GDB开始执行被调试程序program,可通过GDB 命令控制program 的行为;
还可以:gdb program core:使用GDB 同时执行被调试程序program 和core 文件(程序异常中止或退出时,保存的内存映像加调试信息文件,包含程序当前的内存、寄存器、堆栈等信息),便于定位分析程序异常中止或退出的原因; - gdb attach PID (gdb -p PID):使用GDB接管(attach)一个正在运行的被调试程序,PID 为被调试程序的process-ID(可通过pidof program 查看),可通过GDB 命令控制program 的行为。
GDB 调试命令接口类型
主要有3种接口:
- cll接口,就是用户接口,我们在命令行执行gdb进行调试,输入的下一步,打断点等命令,就算这个接口
- mi接口,也就是机器接口,专门成为别人的IDE的后端发命令的(很多主流IDE都是用这个)。
- 还有个emacs编辑器版的接口,估计是为了给编辑器diy爱好者用的。