• 【Linux篇】gdb的使用


    💛不要有太大压力🧡
    💛生活不是选择而是热爱🧡

    在这里插入图片描述

    💚文章目录💚


    1. 背景知识

    image-20221004161118331

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

    2. Linux下,gcc和g++编译生成的可执行程序默认是release模式

    3. 要使用gdb调试,必须在debug模式下进行调试,要加上-g选项

    image-20221004162046120

    如果写makefile的时候 不加-g选项的话,就无法调试。(没有找到调试信息)

    如果用-g选项生成了可执行文件,我们如何查看调试信息呢?

    $ readelf -S mytest | grep -i debug
    
    • 1

    image-20221004163254589

    image-20221004163013963

    可以查看到调试信息

    2. 使用

    gdb mytest:进入开始调试

    1. list或l:显示mytest的源代码,后面直接回车即可(因为gdb会记住最近的一条命令,如果命令无变化,可以直接回车),每次显示十行。(默认可能不是从最开始打印)

      image-20221004164802603

    2. list或 l 0:从第一行开始显示

      image-20221004164833880

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

    4. run / r:开始调试,如果没有设置断点,就直接运行结束

      image-20221004170101809

    5. break / b 行号:给某一行打断点

      image-20221004183505585

    6. info b:查看断点

      image-20221004183538714

    7. delete / d 断点序号:删除断点

      删除断点要结合 info b来看,因为打断点的时候会自动生成断点的序号

      image-20221004183838054

      单独一个d会删除所有断点

    8. next / n:单条执行.(逐过程)

      image-20221004184833478

    9. print / p 变量:打印变量的值

      image-20221004185032786

    10. step / s:步入.(逐语句,会进入函数)

      image-20221004185605887

    11. bt:查看调用堆栈

      image-20221004185801629

    12. finish:直接运行完当前函数

      如果此时进入了一个函数,但是不想继续一步一步走了,想直接运行完这个函数,就用finish

      注意:finish只能结束main函数之外的函数

      image-20221004190146341

    13. display:长显示

      在循环中,我们时常要查看循环变量的值是多少,可以用长显示让循环变量一直显示着

      image-20221004191004344

    14. undisplay 长显示变量的编号:取消变量的长显示

      给变量长显示之后,会对应前面有一个编号

      image-20221004191325173

    15. until X行号:跳至X行

      注意:until是函数内跳转,不会调到函数外部,如果该函数在main函数中的位置是第18行,那么你输入的行数超过18行,他还是会停在18行

      image-20221004191810525

    1. continue / c :跳到下一个断点

      image-20221004193234028

      image-20221004193335281

      并且跳到下一个断点的时候,两个断点中间的代码是被执行了的

    2. disable 断点编号:禁用断点

      image-20221004195157283

    3. enable 断点编号:启用断点

      image-20221004195226499

    4. set var 变量名 = 值:设置变量的值

      image-20221004195637328

    5. 打印自定义类型 或者 数组

      p就可以做到

      image-20221004200357383

      image-20221004200422449

      可以看到,p命令直接就把自定义类型或者数组中的元素全显示出来了

    ✨感谢阅读~ ✨
    ❤️码字不易,给个赞吧~❤️

    在这里插入图片描述

  • 相关阅读:
    2652. 倍数求和
    spdlog记录日志示例 - 使用sink创建logger
    Java攻略集合之基础语法
    Ubuntu QtCreator不能输入中文,可以从其他位置复制中文
    解锁数据安全之门:探秘迅软DSE的文件权限控制功能
    如何获取combinations(a, 2)的结果,只能变量一遍,非常地花费时间。
    三相和单相智能微型断路器功能有区别吗?
    [ICCV-23] Paper List - 3D Generation-related
    总结Redis的原理
    nvm安装与永久配置
  • 原文地址:https://blog.csdn.net/iiiiiankor/article/details/136547372