• Linux调试器---gdb的使用


    顾得泉:个人主页

    个人专栏:《Linux操作系统》  《C/C++》

    键盘敲烂,年薪百万!


    一、gdb的背景

           gdb,全称为GNU调试器(GNU Debugger),是一个功能强大的源代码级调试工具,主要应用于Unix系统,以及Linux下的程序开发。它与GCC一样,都是源于GNU计划,同GCC、Emacs等工具同期诞生。在嵌入式开发中,gdb的使用非常广泛,对于程序的调试有着不可替代的作用,因此对每位嵌入式开发工程师而言都有着至关重要的意义。

           gdb提供了多种强大的功能,以帮助程序员查看程序在执行过程中的内部状态,如:设置断点、单步执行、查看变量值等。这些功能都极大地方便了程序员对程序的调试工作。


     二、gdb的安装

    使用该指令安装gdb调试器:(Ubuntu环境)

            sudo apt-get install gdb

     如果有小伙伴使用上述命令无法安装,尝试这个命令:

            yum install -y gdb


    三、Debug和Release

           默认我们已经创建好了text.c和makefile文件

            我们进行make编译:

           接着我们对text文件进行gdb调试:

           无法调试!为什么呢?

           1.程序的发布方式有两种,debug模式和release模式

           2.Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试

           3.要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

           我们接下来对makefile文件进行修改,加上  -g选项:

            接下来我们尝试进行调试:

           可以进行调试了 。


    四、gdb的基础使用

    1.进入和退出

           进入:gdb 文件名

           退出:CTRL+d或者quit

    2.查看调试的代码

     list    or   l  +  行号,显示指定行之后的代码(自动记录最后一条指令)

    3.断点

    1.打印断点(三种方式)

    1.b+行号

    2.b+函数名+行号

           由于我的疏忽忘记编辑函数,就不进行展示了,大家可以自行练习

    3.b+文件名+行号(适用于多文件下)

    2.查看断点

            info b

    3.删除断点

           d,注意在删除断点中,显示的是编号,而不是行号。

    4.使能(禁用/开启)断点

    1.禁用:disable

           这里的y,n代表断点是否启用,由上图可以看出3号断点已经被禁用。

    2.开启:enable

    4.代码执行结束

           r,直接把要调试的代码全部执行

    5.查看调用堆栈

           因为我的text文件比较简单,没有进行调用堆栈,大家感兴趣的可以自行练习。

     五、扩展完善

            list/ l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行

            list /l函数名:列出某个函数的源代码

            r或run:运行程序

            n或 next:单条执行

            s或step:进入函数调用

            break(b)行号:在某一行设置断点

            break 函数名:在某个函数开头设置断点

            info break :查看断点信息

            finish:执行到当前函数返回,然后挺下来等待命令

            print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

            p变量:打印变量值

            set var:修改变量的值

            continue(或c):从当前位置开始连续而非单步执行程序

            run(或r):从开始连续而非单步执行程序

            delete breakpoints:删除所有断点

            delete breakpoints n:删除序号为n的断点

            disable breakpoints:禁用断点

            enable breakpoints:启用断点

            info(或i) breakpoints:参看当前设置了哪些断点

            display变量名:跟踪查看一个变量,每次停下来都显示它的值

            undisplay:取消对先前设置的那些变的跟踪

            until X行号:跳至X行

            breaktrace(或bt):查看各级函数调用及参数

            info (i) locals:查看当前栈帧局部变量的值

            quit:退出gdb


    结语:Linux调试器关于gdb使用的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~ 

     

  • 相关阅读:
    python面试题合集(一)
    SpringBoot整合RabbitMQ及其原理分析
    黑炫酷的监控界面,实际上是用了什么开源工具?
    Docker Machine简介
    管理类联考——英语二——阅读篇——题材:教育
    我用PYQT5做的第一个实用的上位机项目(六)
    系列三、InputStream常用子类
    Flutter 关于序列化JSON之json_serializable库的使用
    Python函数详解(一)——函数的定义、调用及变量
    中国石油大学《计算机应用基础#》第三阶段在线作业
  • 原文地址:https://blog.csdn.net/m0_71746526/article/details/134497264