Linux学习: 使用gdb和gdbserver进行调试

Posted blogs-of-lxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习: 使用gdb和gdbserver进行调试相关的知识,希望对你有一定的参考价值。

1.引言

  在日常程序开发中不免遇到类似空指针操作导致程序崩溃的问题,所以需要一定的手段去定位bug,而断点调试是普遍使用的技巧,比如Windows中用VC++的debug模式进单步运行、断点调试等,有很友好的图形化操作界面,而在Linux中使用的是没有图形界面的调试工具-GDB(听说eclipse支持GUI调试,暂未尝试),所以需要通过指令进行操作,下面逐步介绍gdb调试环境的搭建和使用方法。

 

2.gdb调试环境搭建

(1)下载gdb工具源码:http://www.gnu.org/software/gdb/download/

技术图片

选择下载最新版本:

技术图片

注:由于个人本地arm-linux-gcc版本较低(4.4.3)不支持 C++11,后面下载编译的是 gdb7.12

(2)解压

   解压tar.gz文件:tar -zxvf xxx.tar.gz

   解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。

(3)编译安装

--------①编译gdb(在Linux主机上运行的工具)

    ./configure --target=arm-linux   //配置要调试的目标为arm-Linux开发板(前提已经配置了arm-linux-gcc交叉编译环境)
    make
    make install //默认安装路径可以在Makefile中看到:prefix = /usr/local

  也可以指定安装目录,比如 : make install prefix=$PWD/tmp 

技术图片

  环境变量添加该路径 或 复制arm-linux-gdb到/bin目录下后便可作为系统工具使用。

错误1:

location.c:527:19: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
       || *argp == ‘‘

解决方法:  || *argp == ‘‘  修改为  || *argp == NULL

 

错误2:

make[5]: 进入目录“/home/sheldon/work/linux_project/gdb-8.2/gdb/doc”
/home/sheldon/work/linux_project/gdb-8.2/missing makeinfo --split-size=5000000 --split-size=5000000   -I ./../../readline/doc -I ./../mi -I .     -o gdb.info ./gdb.texinfo
/home/sheldon/work/linux_project/gdb-8.2/missing: 81: /home/sheldon/work/linux_project/gdb-8.2/missing: makeinfo: not found
WARNING: makeinfo is missing on your system.
         You should only need it if you modified a .texi file, or
         any other file indirectly affecting the aspect of the manual.
         You might want to install the Texinfo package:
         <http://www.gnu.org/software/texinfo/>
         The spurious makeinfo call might also be the consequence of
         using a buggy make (AIX, DU, IRIX), in which case you might
         want to install GNU make:
         <http://www.gnu.org/software/make/>
make[5]: *** [gdb.info] 错误 127
make[5]: 离开目录“/home/sheldon/work/linux_project/gdb-8.2/gdb/doc”
make[4]: *** [subdir_do] 错误 1
make[4]: 离开目录“/home/sheldon/work/linux_project/gdb-8.2/gdb”
make[3]: *** [install-only] 错误 2
make[3]: 离开目录“/home/sheldon/work/linux_project/gdb-8.2/gdb”
make[2]: *** [install] 错误 2
make[2]: 离开目录“/home/sheldon/work/linux_project/gdb-8.2/gdb”
make[1]: *** [install-gdb] 错误 2
make[1]: 离开目录“/home/sheldon/work/linux_project/gdb-8.2”
make: *** [install] 错误 2
[email protected]-vm:~/work/linux_pro

解决方法:sudo apt-get install texinfo (或者从GNU下载源码自行编译安装:http://ftp.gnu.org/gnu/texinfo/

 


--------②编译gdbserver(在Linux开发板上作为父进程运行,启动加了gdb调试信息的应用程序)

    cd gdb/gdbserver/   //继续进入到gdbserver目录
    ./configure --host=arm-linux  //配置要运行的平台为arm-Linux开发板
    make
    make install prefix=../../tmp/gdbserver //指定安装到之前的tmp目录下

技术图片

  将编译生成的gdbserver通过nfs或usb复制到开发板上,后面就可以开始远程gdb调试了!

 

以上是关于Linux学习: 使用gdb和gdbserver进行调试的主要内容,如果未能解决你的问题,请参考以下文章

学习4412开发板gdb和gdbserver的调试

linux内核调试技术之GDB和GDBServer

gdb和gdbserver调试android应用与可执行

Linux下交叉编译gdb,gdbserver+gdb的使用以及通过gdb调试core文件

使用gdb+gdbserver调试应用程序

嵌入式arm linux环境中gdb+gdbserver调试