分享几款Linux环境下常用的debug工具

  • 一、前言
  • 二、GDB简介
  • 三、GDB调试的对象
  • 四、GDB的安装方式
  • 五、GDB的使用方式
  • 六、GDB调试实操
  • 七、结语


一、前言

前段时间调试摄像头需要debug一下,于是学习了一下Linux环境下的几种debug的方法,其中我最喜欢的是使用GDB调试器进行C代码的调试,这里给大家分享出来供大家学习。

linux 移植android property service linux 移植debug工具_linux

二、GDB简介

GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:

  1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
  2. 可让被调试的程序在你所指定的调置的断点处停住。
  3. 当程序被停住时,可以检查此时你的程序中所发生的事。
  4. 动态的改变你程序的执行环境。

三、GDB调试的对象

gdb程序调试的对象是可执行文件,,需在执行gcc指令编译程序时,加上-g参数,指定程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb 利用这些信息使源代码和机器码相关联。

启动gdb后,可以在命令行制定很多选项,也可以用下面的方式在命令行中指定想要调试的文件名:

$ gdb filename

此时,gdb会装入名为filename的可执行文件,用这种方式运行gdb可以直接指定想要调试的程序。也可以用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。

四、GDB的安装方式

我们想要使用GDB调试需要首先下载并安装GDB,具体安装方式如下:

下载gdb源码:

https://ftp.gnu.org/gnu/gdb/

编译安装gdb调试工具

sudo apt-get install libgmp-dev

解压文件

tar -vxzf gdb-11.2.tar.gz

创建文件夹(在gdb目录下)

mkdir build output //build存放配置文件 output存放安装文件

配置(切换到/gdb/build目录下)。如果配置错误,直接删除build文件夹,再次创建文件夹,重新配置。

//--build 编译代码的主机
//--host 运行代码的主机
//--target 
../configure --build=aarch64-rockchip-linux-gnu --host=aarch64-rockchip-linux-gnu --prefix=/home/forlinx/test/gdb/gdb-11.2/output

编译(在/gdb/build目录下执行)

make

安装 (在/gdb/build目录下执行)

make install //会将文件安装到--prefix=/home/forlinx/test/gdb/gdb-11.2/output指定目录

五、GDB的使用方式

我们在启动 GDB 的同时,会打印出一堆免责条款。通过添加 --silent(或者 -q、–quiet)选项,可将比部分信息屏蔽掉:

启动GDB:

  • gdb filename :启动未启动程序进行调试(需要run);
  • gdb attach pid:对已经启动的程序调试, detach让gdb调试器与程序分离;
  • gdb corename:调试core文件;

GDB 调试器提供有大量的调试选项,可满足大部分场景中调试代码的需要。如下图 所示,罗列了几个最常用的调试指令及各自的作用:

linux 移植android property service linux 移植debug工具_windows_02


如上所示,每一个指令既可以使用全拼,也可以使用其首字母表示。另外,表 1 中罗列的指令仅是冰山一角,GDB 还提供有大量的选项,可以通过 help 选项来查看。

六、GDB调试实操

下面给大家演示一下GDB的使用过程,首先使用GDB+文件名的方式启动GDB调试器

linux 移植android property service linux 移植debug工具_GDB_03


进入GDB调试器后我们就可以进行代码的调试了,但是在调试之前我们一般需要对代码进行打断点的操作,我们可以使用 l 命令将我们的代码行号打印出来(小的demo可以这么做,但是大的程序不建议使用该方式)。

如果你的代码量非常的大,那么这种方式肯定不适合你,你可以使用 b+函数名 的方式来打断点。

linux 移植android property service linux 移植debug工具_调试器_04


l 显示带行号的源代码:默认情况下一次只能显示10行,按回车显示后续代码,比较大的代码可以忽略该方式。我们使用 b+函数名b+行号 的方式进行打断点。

linux 移植android property service linux 移植debug工具_windows_05


打完断电后我们可以使用 r 命令开始运行程序,程序会自动运行,并在断点位置停下。

linux 移植android property service linux 移植debug工具_调试器_06


到这里我们就可以开始我们自己的操作了,比如我们可以查看某个变量的值,我们可以让代码运行下一句等等操作。显示变量的值:

linux 移植android property service linux 移植debug工具_windows_07


单步运行:

linux 移植android property service linux 移植debug工具_linux_08


当然我们也可以使用 s 实现单步运行,但是两个执行的过程是不一样的,感兴趣的可以去百度一下。我们可以使用 c 继续运行程序:

linux 移植android property service linux 移植debug工具_服务器_09


q 退出调试:

linux 移植android property service linux 移植debug工具_GDB_10


Enter键,复制上一条命令,单步调试的利器

七、结语

一块好的调试工具可以让你工作效率翻倍,当然Linux下并不止GDB这一款调试器,大家感兴趣的话可以了解一下其他的调试工具,基本上都大同小异,无非就是打断点、查看变量值、单步运行这些工作,但是有些工具会有些特定功能,大家可以自行百度一下。