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进行调试的主要内容,如果未能解决你的问题,请参考以下文章