嵌入式-gdb-gdbserver-终极总结
嵌入式 gdb gdbserver 终极总结
gdb
IAR MDK VS
gdb 来一行行的 运行程序、单步执行、跳入/跳出函数、设置断点、查看变量
强大的程序调试工具
Linux 系统,比如 ubuntu、 直接运行 gdb 来调试程序
直接在嵌入式系统中运行 gdb 不太现实(性能强大的嵌入式芯片可以这么做)。
嵌入式系统中一般在 PC 端运行 gdb 工具,源码也是在 PC 端,源码对应的可执行文件放到开发板中运行。
我们需要在开发板中运行 gdbserver
通过网络与 PC 端 的 gdb 进行通信。
要想在 PC 上通过 gdb 调试嵌入式程序,那么需要两个东西:gdb 和gdbserver,其中 gdb 是运行在 PC 上的,gdbserver 需要我们移植到开发板上。
一般交叉编译已经自带了 gdb 和 gdbserver,因此可以不用移植,直接使用交叉编译器自带的即可。
果交叉编译器自带了 gdb 和 gdbserver 的话只需要将 gdbserver 拷贝到开发板根文件系统的/bin 目录下
gdb 官网上获取源码
首先编译 gdb,gdb 是运行在 PC 端的程序,gdb 编译的时候需要进行配置
植 gdbserver,gdbserver 是在开发板上运行的,因此要交叉编译。
gdbserver 软件 /usr/bin 目录下 gdbserver –version //查看版本号
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意-g 选项
完成以后将得到的 gdbtest 可执行文件发送到开发板中。
gdbserver 192.168.1.253:2001 gdbtest // 启动开发板上的 gdbserver
192.168.1.253 为调试机的 IP 地址,也就是 ubuntu 的 IP 地址,2001 是端口号,
可以任意给一个端口号,gdbtest 是要调试的可执行文件。
上位机
arm-linux-gdb gdbtest
target remote 192.168.1.251:2001 //连接到开发板上
l l出所有程序源码
b b main 或 break main 第 11 行设置断点
c c 命令用于运行到断点处,输入 c 命令程序就会运行,直到下一个断点处
s s 命令(step)是单步运行执行,此函数会进入到函数里面。
n n 命令(next)也是单步运行,但是 n 命令不会进入到函数里面
p 命令(print)用于打印某个变量值。
q 命令(quit)用于退出调试,开发板上的 gdbserver 也会停止。