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 == ‘\0‘

解决方法:  || *argp == ‘\0‘  修改为  || *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
sheldon@sheldon-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调试了!

原文地址:https://www.cnblogs.com/blogs-of-lxl/p/10462262.html

时间: 2024-10-07 03:50:45

Linux学习: 使用gdb和gdbserver进行远程调试的相关文章

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

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

Linux下Debug模式启动Tomcat进行远程调试

J2EE开发各类资源下载清单,  史上最全IT资源,点击进入! 一.      应用场景 在实际的测试过程中,可能会遇到由于程序执行的不间断性,我们无法构造测试场景来验证某个功能的正确性,只有通过代码级的调试才能验证功能是否正确.然而开发本地调试的话,不具有说服力,这时我们测试人员必须连接到linux下的基线版本代码进行远程调试 二.调试步骤 1.部署服务工程到Linux系统下的Tomcat中,本文档重点是远程调式,为了防止文档篇幅累赘,这里就不介绍部署工程了. 2.更改tomcat远程调试端口

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

交叉编译gdb和gdbserver 1.下载gdb:下载地址为:http://ftp.gnu.org/gnu/gdb/按照一般的想法,最新版本越好,因此下载7.2这个版本.当然,凡事无绝对.我们以gdb-7.2.tar.bz2 这个文件为例.2.解压缩: $ tar jxvf gdb-7.2.tar.bz2 注:小技巧:Linux下一般压缩文件后缀为.tar.bz2和.tar.gz,它们解压命令有两三个选项是一致的: xf(v),前者再加上j选项,后者再加上z选项. 3.进入该目录 $ cd g

Windows下通过ARM目标板上的gdbserver进行远程调试的方法

因某种需要,要在Windows平台上进行程序开发,目标板是基于Micrel芯片(ARMv4t)做的,上面运行有Linux最小系统,只有最基本的命令,需要在Windows平台上交叉编译能在ARMv4t上运行的目标代码,并且还要能进行远程调试.基于这些需求,初步计划按以下步骤进行: 1.先在Windows平台上交叉编译一个简单的C语言程序,并上传到开发板上,能正常运行即可: 2.交叉编译gdbserver,并上传到开发板: 3.进行远程调试. 按上述计划,首先要找一个Windows环境下的交叉编译环

linux学习之四---gdb调试

在Linux应用程序开发中,最常用的调试器是gdb. 一.启动和退出gdb gdb调试的对象是可执行文件,而不是程序的源代码.如果要使一个可执行文件可以被gdb调试,那么使用编译器gcc编译时需要加入-g选项,-g选项告诉gcc在编译时加入调试信息,这样gdb才可以调试这个被编译的程序. 1.编译test.c源程序 gcc -g test.c -o test ./test test.c中的源码为: #include<stdio.h> int get_sum(int n) { int sum=0

linux学习笔记——打包、压缩、远程文件传输

############打包.压缩########################## 1.打包 (打包表示把一堆文件变成一个)tar            ##打包工具        -f        ##指定生成包的名字        -c        ##创建包        -v        ##显示创建过程        -t        ##查看包中内容        -x        ##解包        -r        ##追加文件到包中        -C  

linux学习之gdb调试工具篇

gdb 1.gdb介绍 本章介绍一种很强大的调试工具gdb,可以完全操控程序的运行,使得程序就像你手里的玩具一样,叫它走就走,叫它停就停,并且随时可以查看程序中所有的内部状态,比如各变量的值.传给函数的参数.当前执行的代码行等. 有了gdb以后,即使调试手段丰富了,调试的基本思想仍然是"分析现象->假设错误原因->产生新的现象去验证假设"这样一个循环,根据现象如何假设错误原因,以及如何设计新的现象去验证假设,这都需要非常严密的分析和思考,如果因为手里有了强大的工具就滥用而忽

20150502 调试分析之 使用gdb远程调试ARM开发板

20150502 调试分析之 使用gdb远程调试ARM开发板 2015-05-02 Lover雪儿 今天我们要学习的是使用gdb和gdbserver来远程调试开发板程序. 下面是本人的一些具体步骤: 下载gdb-7.9.tar.gz地址: http://ftp.gnu.org/gnu/gdb/gdb-7.9.tar.gz 安装gdb tar -jxvf gdb-7.9.tar.bz2 ./configure -target=arm-none-linux-gnueabi --prefix=/hom

gdbserver远程调试嵌入式linux应用程序方法

此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板. 嵌入式linux应用程序的开发一般都是在linux里面编写好代码,并用交叉编译器arm-linux-gcc编译好之后再下载到板子上运行.如果建立了远程调试(能够在PC机ubuntu中调试板子中的linux应用程序),这样对于开发程序是极其方便的. 以下是摘自网络上的一些方法.其中加入了自己所遇到的一些问题,并提出了解决方法. 1.首先建立nfs文件系统,让PC机