• 【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命令直接就把自定义类型或者数组中的元素全显示出来了

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

    在这里插入图片描述

  • 相关阅读:
    Linux更新IP后如何配置网卡
    Electron桌面应用开发基础
    vue3实现表格数据导出Excel
    一拖三快充线(USB-C转三充)的解决方案--LDR6020P
    BEM命名法
    java做个qq机器人
    SQLite3 操作命令以及c/c++编程API和例子
    SpringBoot SpringBoot 运维实用篇 2 配置高级 2.1 临时属性
    【结构型模型】享元模式
    花费半年整理拼多多、饿了么、蚂蚁金服等大厂Java面试题大集合
  • 原文地址:https://blog.csdn.net/iiiiiankor/article/details/136547372