arm板gdb调试移植
arm板上对程序在线调试,一般使用的就是gdb+gdbserver。而我们的交叉编译工具链中,都带有gdb(arm-linux-gnueabihf-gdb
),所以我们移植的时候,只需要移植gdbserver
就行。下面是两者的关系。
arm-linux-gnueabihf-gdb
即gdb,运行在电脑端,人机交互界面。arm板端不需要,所以不用移植到arm板中。gdbserver
运行在arm板端,用于和gdb交互。所以需要移植。
下载GDB源码
这里用的GDB源码版本为gdb-8.1.tar.gz
。
- 官方下载地址:http://ftp.gnu.org/gnu/gdb/
- 笔者资源,其中包含编译好的gdbserver以及gdb手册。https://download.csdn.net/download/qq_23274715/11997953
gdbserver移植
- 解压源码
tar -zxvf gdb-8.1.tar.gz
- 进入gdbserver目录。
cd gdb-8.1/gdb/gdbserver/
- 配置
./configure --host=arm-linux-gnueabihf
. - make -j4
- 编译成功后就会在当前目录中生成
gdbserver
.然后将其复制到arm开发板便可使用。- 可以使用命令
arm-linux-gnueabihf-strip gdbserver
先对gdbserver
的大小进行裁剪。笔者的裁剪前为3.8M,而裁剪后只有268K.然后再复制到开发板。 - 下面是笔者自己编译生成的可执行文件。可以直接拷贝到arm端使用。连接.
- 可以使用命令
gdbserver+gdb进行调试
- 编写测试文件
gdb_test.c
. - 交叉编译测试文件。
arm-linux-gnueabihf-gcc -g gdb_test.c -o gdb_test.o
.- 注意: 对于要进行调试的文件,编译时要用
-g
选项。否则在调试的时候会遇到查不到变量的值等一系列问题。
- 注意: 对于要进行调试的文件,编译时要用
- 复制
gdb_test.o
到arm板。注意此文件要有可执行权限。 - arm板中启动
gdbserver
../gdbserver 192.168.1.12:6000 ./gdb_test.o
。- 192.168.1.12为电脑端的ip地址。
- 6000为端口号。
./gdb_test.o
为要调试的程序。
- 如果启动成功,会显示如下提示
Process ./gdb_test.o created; pid = 622
Listening on port 6000 - 在电脑中启动gdb.
arm-linux-gnueabihf-gdb
,进入GDB调试器。如下(gdb)
- 在调试器中输入
target remote 192.168.1.10:6000
- 192.168.1.10为arm端的ip地址。
- 6000为gdbserver调试时创建的端口号。
- 如果连接成功,会出现如下显示
(gdb)
- 这是就可以进行调试了。可以使用如下命令进行简单调试。
l
查看源代码。list
的缩写。p 变量
查看变量的值。p
为print
的缩写。- 如果提示
No symbol "i" in current context
。可能原因是程序编译时没有加-g
选项。
- 如果提示
b
添加断点。如b main
给main函数添加断点。b 20
第20行添加断点。c
继续运行。continue
的缩写。n
单步运行。q
退出调试。
关于技术交流
此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。