http://ftp.gnu.org/gnu/gdb/
下载稍微早点的版本,因为最新的版本在配置时可能需要版本更高的运行环境,可能会有一堆麻烦,所以建议下载旧点的版本号,我下载 gdb-7.8.1.tar.gz 我的PC环境是虚拟机Ubuntu 16.04
在PC上用gdb调试一个a.out程序时,直接 gcc main.c -g 就可以编译出含有gdb调试信息的可执行文件 a.out
然后在调试的时候就用 gdb a.out 就可以进入gdb调试环境中
所以在使用交叉gdb时需要用交叉编译链编译出arm开发板上的执行文件,在PC机上运行能打开arm可执行文件的gdb工具,这就是 arm-linux-gdb
解压gdb源码编译gdb的工具:
tar xvf gdb-7.8.1.tar.gz
mkdir arm-gdb
./configure --target=arm-cortex_a9-linux-gnueabi --prefix=/home/xxx/tools/gdb-7.8.1/arm-gdb/
make -j4
make install -j4
其中用到的几个参数如下:
--target 指定目标机交叉编译器前缀,比如--target=arm-cortex_a9-linux-gnueabi ,交叉编译链
--host 指定编译后的运行主机,默认就是 x86_64-linux,如果要运行在PC上就不指定,他会选择系统的编译工具,如果是运行在arm上就用交叉编译链
--prefix 指定要安装的目录
如果遇到下边的错误,应该是Ubuntu 没有安装txtinfo
WARNING: ‘makeinfo’ is missing on your system.
安装 txtinfo
sudo apt-get install texinfo
然后重新configure make 和make install
添加环境变量
vi ~./brashrc
export PATH=$PATH:/home/xxx/tools/gdb-7.8.1/arm-gdb/bin
执行如下就说明安装成功
arm-cortex_a9-linux-gnueabi-gdb -v
GNU gdb (crosstool-NG linaro-1.13.1-4.8-2013.11 - nexell) 7.6.2
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-build_unknown-linux-gnu --target=arm-cortex_a9-linux-gnueabi".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
cd gdb/gdbserver
./configure --target=arm-cortex_a9-linux-gnueabi --host=arm-cortex_a9-linux-gnueabi
make CC=arm-cortex_a9-linux-gnueabi -j4
就会在当前路径下生成 gdbserver,然后将gdbserver拷贝到arm开发板的/usr/bin/下
得到上边两个必须的工具后,就看怎么使用
因为交叉编译的gdb基于网络通信来完成gdb调试,所以就需要分别在ARm端和PC端运行各自的工具来保持通信
首先在PC端编译出ARM端使用的可执行二进制文件
arm-cortex_a9-linux-gnueabi-gcc main.c -g
然后把 a.out拷贝到ARM端
在ARM端执行:
# gdbserver 192.168.9.101:1234 a.out //ARM的IP地址:自定义的一个端口
在PC端执行:
arm-cortex_a9-linux-gnueabi-gdb a.out
在PC端的gdb中连接ARM的gdbserver
(gdb) target remote 192.168.9.101:1234
你会看到ARM端出现
Remote debugging from host 192.168.9.68
这就说明gdb连接已经建立现在就可以使用gdb调试了