Linux调试器---gdb的使用

顾得泉:个人主页

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

键盘敲烂,年薪百万!


一、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使用的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~ 

猜你喜欢

转载自blog.csdn.net/m0_71746526/article/details/134497264