Linux系统编程入门4 - GDB调试

本文详细介绍了GDB调试工具在Linux和Unix系统中的基本功能,包括启动程序、设置断点、查看代码和执行调试命令,以及如何在实际项目中使用它进行代码调试。
摘要由CSDN通过智能技术生成

一、什么是GDB

  • GDB 是由 GNU 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境,GDB 是 Linux 和许多类 Unix 系统中的标准开发环境
  • 一般来说,GDB 主要帮助你完成下面4个方面的功能:

        1. 启动程序,可以按照自定义的要求随心所欲的运行程序

        2. 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式)

        3. 当程序被停住时,可以检查此时程序中所发生的事

        4. 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG

二、GDB命令 - 启动、推出、查看代码

\triangle启动和退出 :

        gdb 可执行程序

        quit 或者 q

\triangle给程序设置参数/获取设置参数 :

        set args 10 20

        show args

\triangleGDB 使用帮助 :

        help

\triangle查看当前文件代码 :

        list 或 l (从默认位置显示)

        list 或 l 行号 (从指定的行显示)

        list 或 l 函数名(从指定的函数显示)

\triangle查看非当前文件代码 :

        list 或 l 文件名:行号

        list 或 l 文件名:函数名

\triangle设置显示的行数 :

        show list 或 listsize

        set list 或 listsize 行数

当通过 gcc 指令获得可执行程序时,如 test,使用下方指令进入 gdb 模式

                                                                gdb test

再利用 set args 指令来为可执行程序设置测试参数,本质上是给 main 函数传入实参。

三、GDB命令 - 断点操作

\triangle设置断点

        b/break 行号

        b/break 函数名

        b/break 文件名:行号

        b/break 文件名:函数

\triangle查看断点

         i/info b/break

\triangle删除断点

        d/del/delete 断点编号

下面用代码演示设置断点查看断点的操作。

以下输出信息中各列的含义分别是

断点编号(Num)、断点类型(Type)、是临时断点还是永久断点(Disp)

目前是启用状态还是禁用状态(Enb)、断点的位置(Address)

断点当前的状态(作用的行号、已经命中的次数等,用 What 列表示)。

如果要删除断点的话,首先应该使用 info break 指令查看此时的代码中有几个断点,而这些断点是有序排列的,这些有序序号就是断点编号

\triangle设置断点无效

        dis/disable 断点编号

\triangle设置断点生效

        ena/enable 断点编号

\triangle设置条件断点(一般用在循环的位置)

         b/break 行号 if i==5

使用 disable 1 指令后,编号为1的断点的 Enb 从 yes 变为了 no

在 for 循环中加入条件断点,可以让程序在 设定的 i 值上停止。

四、GDB命令 - 调试命令

\triangle运行GDB程序

        start(程序停在第一行)

        run(遇到断点才停)

\triangle继续运行,到下一个断点停

        c/continue

\triangle向下执行一行代码(不会进入函数体)

        n/next

\triangle变量操作

        p/print 变量名(打印变量值)

        ptype 变量名(打印变量类型)

\triangle向下单步调试(遇到函数进入函数体)

         s/step

         finish(跳出函数体)

\triangle自动变量操作

        display 变量名(自动打印指定变量的值)

        i/info display undisplay 编号

\triangle其它操作

        set var 变量名=变量值 (循环中用的较多)

        until (跳出循环)

使用下方代码查看 main.cpp 的具体内容,并使用 :set number 指令查看每行代码的编号,如下图所示。

 vim main.cpp

其中主函数 main 在第6行,记住这个数字。进入 gdb 模式后,先使用指令 i b 查看此时有无断点,再使用 start 指令运行当前程序,也就是 main ,可以看到程序在 main 所在的行停止了。 

继续输入指令 c ,程序就会继续运行直至结束,如:

关于 GDB ,牛客上的课程就讲述了这些,等后续课程深入再进行补充。

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值