• 什么是GDB?

       GDB是一个由 GNU 开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具。

       GDB 中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。

       GDB 是 linux 下调试程序的神器,做为 linux 程序员,如果不能熟练的使用 GDB 进行程序调试,那将是很失败的事情,会让你在工作中对于程序的调试煞费苦心,不仅工作效率低下,并且写满到处的 printf更是让人苦不堪言…所以 GDB 也渐渐的成为了 linux 程序员的一个必备软件技能。

  • GDB的使用

       1.开启程序的gdb调试

           程序编译阶段,需添加-g 选项,产生符号调试工具(GNU 的 gdb)所必要的符号信息。

            例如:

                gdb的使用

            编译:

                gdb的使用

            运行:

                gdb的使用

程序出现了段错误,段错误因为并非在程序编译阶段出错,因此排查起来比较麻烦,程序短小时候,还可以使用 printf 函数多加调试信息即可排查,当代码量大的时候,将是以间头疼的事情,这时候就需要用到 gdb 调试工具来协助排查。

    2.进入gbd调试

        进入gdb调试方式:

                gdb的使用

    3.开始gdb调试

        开始调试有2中方式:

                a) r(run)  开始运行程序,可携带参数

                gdb的使用

                b)s(start) 单步调试

                        s(step):如果当前步是函数,则跟进函数内部,逐步调试

                        n(next):不管当前步是否为函数,不跟进函数,仅逐步调试当前程序。

                gdb的使用

    4.排查错误位置

        r 命令后,程序开始运行,出错

                        gdb的使用

        bt 命令(查看堆栈信息)

            我们可以从上边的信息中看到错误好像是 memcpy 部分的问题,应该是内存拷贝出问题了,这时候需要 bt 命令来查看以下堆栈信息。

gdb的使用

            从打印信息来看,错误似乎是在init.c的10行出错。

        b 命令(添加断点)

            这时候我们需要在 init.c 文件的 10 行添加断点,来看看到底是否是这里出的问题。

                gdb的使用

            添加断点成功后,我们重新 r 命令运行程序

                gdb的使用   

        l 命令(查看调试附近代码)

           当程序重新走到 210行的时候,遇到断点,暂停运行,这时候我们如果想查看 10行附近代码的话,可以使用 l 命令 。

                gdb的使用

        p 命令(打印变量信息)

            程序走到10行并没有出错,这时需要查看变量的内容是不是出问题了。

                gdb的使用

            可以看出该变量没有问题。从头逐步调试的话,不难发现,实际上是因为我们p1变量是一个字符常量,但是使用了memcpy,因此出错。

        i 命令(查看信息)

                                gdb的使用

        d 命令(删除断点)

                gdb的使用

        q 命令(退出 gdb 调试)

相关文章:

  • 2021-08-02
  • 2022-01-08
  • 2021-11-10
猜你喜欢
  • 2021-05-20
  • 2021-06-24
  • 2021-06-23
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案