gdb的使用

  • 什么是GDB?

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

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

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

  • GDB的使用

       1.开启程序的gdb调试

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

            例如:

                

            编译:

                

            运行:

                

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

    2.进入gbd调试

        进入gdb调试方式:

                

    3.开始gdb调试

        开始调试有2中方式:

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

                

                b)s(start) 单步调试

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

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

                

    4.排查错误位置

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

                        

        bt 命令(查看堆栈信息)

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


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

        b 命令(添加断点)

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

                

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

                   

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

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

                

        p 命令(打印变量信息)

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

                

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

        i 命令(查看信息)

                                

        d 命令(删除断点)

                

        q 命令(退出 gdb 调试)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值