GNU Debugger(GDB)使用教程
一、GDB介绍1、什么是GDB1GDB是GNU项目的开源、源代码级命令行调试器可控制程序的启动、暂停和终止并在程序暂停时查看内部变量、寄存器、调用栈等运行现场供开发者定位代码问题。2GDB支持绝大多数主流UNIX、Windows、macOS操作系统嵌入式开发使用对应架构的交叉版GDB如ARM Cortex-M系列arm-none-eabi-gdb。3GDB支持四类调试操作①加载/启动目标程序配置运行参数、环境变量控制程序执行流程。②设置代码断点和观察点满足特定触发条件时自动暂停程序。③程序主动暂停、断点命中或异常崩溃后查看寄存器、变量、函数调用栈还原现场。④运行时临时修改内存、寄存器变量的值用于验证问题修复逻辑修改仅调试期间生效不改动原始可执行文件或固件。4GDB支持的编程语言C/C、Go、Rust、Fortran、Assembly汇编语言等。2、嵌入式远程调试架构1被调试的目标程序分三类运行场景①本地调试GDB直接控制和调试同一台机器上的进程。②远程调试GDB通过串口/TCP连接到远程目标上的GDB Server调试远程程序。③嵌入式/模拟器调试GDB连接到OpenOCD/QEMU等间接调试裸机固件或模拟器里的系统。2下图所示的是嵌入式远程调试架构。①Host主机层主机层一般是电脑主机IDE/DDD/GDBGUI是图形调试前端比如VSCode、CubeIDE、可视化GDB工具GDB是核心调试客户端主要用于下发端点、读写内存等调试指令OpenOCD是GDB远程服务端适配ST-Link/J-Link等调试器把GDB指令转为SWD/JTAG硬件时序②HW probe硬件探针层硬件探针层主要是硬件调试转换器比如ST-LinkUSB口连接电脑SWD/JTAG排线连接单片机负责电信号转换③Target目标设备层在嵌入式中被调试的目标是开发板/芯片图中所示的是两种架构相应的有两种完成独立的远程调试链路右侧链路是Cortex-M单片机主流方案调试员在PC端图形调试界面操作界面后端将操作指令转给GDBGDB通过TCP连接OpenOCD默认3333端口向其下发调试命令然后OpenOCD驱动ST-Link硬件把指令转换成SWD/JTAG电平时序通过SWD/JTAG直接与Cortex-M4的调试接口通信实现读写寄存器、烧 Flash、启停程序左侧链路是Cortex-A Linux MPU方案调试员在PC端图形调试界面操作界面后端将操作指令转给GDBGDB通过网口TCP远程连接开发板上运行的gdbservergdbserver是Linux端轻量代理接管A7内核上被调试的应用程序

相关新闻