码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Linux篇】gdb的使用


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

    在这里插入图片描述

    💚文章目录💚

      • 1. 背景知识
      • 2. 使用


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

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

    在这里插入图片描述

  • 相关阅读:
    Kafka学习笔记
    flutter plugins插件【二】【FlutterAssetsGenerator】
    《数据结构、算法与应用C++语言描述》使用C++语言实现二维数组对角矩阵
    Android greendao 报错Could not init DAOConfig
    力扣每日一题 自定义字符串排序
    抖音开放平台第三方代小程序开发,授权事件、消息与事件通知总结
    ElasticSearch 使用 searchAfter() 进行遍历查询 查到的数据总数小于 totalHits
    C语言 error LNK2019: 无法解析的外部符号
    [免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
    电力网络通信公司有哪些,电力网络通信公司排名
  • 原文地址:https://blog.csdn.net/iiiiiankor/article/details/136547372
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号