使用make+gcc进行编译arm muc 程序时,使用gdb可以提供类似于mdk的调试功能,本文简单介绍怎么使用gdb对arm芯片(apollo)进行调试。
编译的时候需要给gcc编译选项加上-g,以生成包含调试信息的可执行文件,方可用gdb进行调试。
一 运行jlink GDB server:
或者命令行中,运行
JLinkGDBServerCL.exe -USB -device AMAPH1KK-KBR -endian little -if SWD -speed auto -ir –LocalhostOnly
二 配置gdb init参数(~/.gdbinit):
set auto-load safe-path /
# Connect to the GDB Server
target remote :2331
monitor reset
monitor halt
monitor endian little
monitor speed auto
monitor flash device AMAPH1KK-KBR
gdb启动的时候,会依次执行该文件中的命令,所以可以在这个文件中添加gdb初始化命令。
三 启动gdb调试:
1 调试cortex m芯片的时候,需要使用交叉工具链,所以推荐把工具链的位置添加到环境变量。Bash环境,修改~/.bashrc ~/.bashrc,添加:
export PATH=$PATH:/g/WorkSpace/rftech_repo/Apollo3-SDK-2018.07.03/tools/gcc/win/gcc-arm-none-eabi/bin
红色部分为工具链的位置。
2 启动调试前,确保板子已经连接到jlink,jlink GDB server就绪
3 启动调试:
arm-none-eabi-gdb output/apollo3_evk/bin/apollo3_evk.axf
红色部分为包含调试信息的可执行文件, 连接成功后的输出如下:
箭头所指的地方为gdb命令提示符,在这个地方输入调试命令。
命令分三种,target, monitor, 还有gdb自带命令。其中常用的是monitor和gdb自身命令。
常用命令:
monitor reset : 重置cpu。 更多的monitor命令,请输入monitor help 查看
file xxxx.elf/axf :指定可执行文件, 启动gdb的时候可以不指定可执行文件,启动以后用file命令指定
load : 烧录可执行文件到目标设备。
l/list : 查看代码
b/breakpoint (line/func/addr/*func) 在指定的位置设置断点(可以指定行号,函数,代码地址)
c/continue :继续执行直至下一个断点
s : 单步执行,如果遇到函数调用,则进入函数,类似于keil的step into
n: 单步执行,如果遇到函数调用,则跳过该函数,类似于keil的step over
si: 类似于s,执行的是汇编指令的单步调试
ni: 类似于n,执行的是汇编指令的单步调试
i: info
bt : 查看当前的进程栈
q : 退出调试
参考文档:
Debuging with gdb:
https://www.eecs.umich.edu/courses/eecs373/readings/Debugger.pdf
http://davis.lbl.gov/Manuals/GDB/gdb.html
A guid to gdb:
http://www.cabrillo.edu/~shodges/cs19/progs/guide_to_gdb_1.1.pdf