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 也会停止。
|