码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 猿创征文|【Linux】Linux中的gdb调试器的使用



    需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。


     目录

    一、什么是gdb?

    二、gdb的安装

    三、gdb的使用

    1、只有debug版可以被调试

    2、gdb的常用指令

    2.1显示代码:l指令(list指令)

    2.2设置断点:b指令(break指令)

    2.3显示断点/禁用断点/开启断点:info b指令/disable指令/enable指令

    2.4删除断点:d指令(delete指令)

    2.5执行代码:r指令(run指令)

    2.6逐过程:n指令(next指令)

    2.7逐语句:s指令(step指令)

    2.8运行到下一个断点:c指令(continue指令)

    2.9查看函数调用堆栈:bt指令

    2.10跑完当前函数:finish指令

    2.11临时查看变量:p指令

    2.12长期监视/取消监视变量的值:display指令/undisplay指令

    2.13跳转到某一行:until指令

    2.14修改变量的值:set var指令

    2.15显示当前函数内临时变量:info locals


    一、什么是gdb?

    gdb是Linux中的调试器。用于debug版本代码的调试

    二、gdb的安装

    sudo yum install gdb

    三、gdb的使用

    gdb debug版可执行文件

    1、只有debug版可以被调试

    因为Linux中生成的可执行程序默认是release版本,是不带debug调试信息的。

    只有debug版可以被调试,那么我们在编译的时候需要加上-g选项,这样生成的可执行程序就是debug版。

    我们可以使用readelf指令查看ELF格式的文件信息:

    可以发现debug版本中有debug信息,这也是debug版比release版体积大的原因。

    2、gdb的常用指令

    2.1显示代码:l指令(list指令)

    因为gdb的l指令并不是从第一行开始显示,如果想从第一行开始显示,可以输入l 0,这样就会在屏幕上显示10行代码。

    gdb中会记忆上次输入的指令,按下回车键即可执行上一次的指令。

    2.2设置断点:b指令(break指令)

    b 18

    b18表示在第18行设置断点。

    2.3显示断点/禁用断点/开启断点:info b指令/disable指令/enable指令

    info b指令会显示出所有的断点。Enb表示断点的状态,y表示断点正常使用,n表示断点已被禁用。

    2.4删除断点:d指令(delete指令)

    想要删除哪个断点不是看这个断点在代码中的行号,而是在断点列表的编号。这里要删除第2个断点,直接d 2即可。

    2.5执行代码:r指令(run指令)

    执行代码后会在断点处停下。

    2.6逐过程:n指令(next指令)

    就是vs中的F10。

    2.7逐语句:s指令(step指令)

    就是vs中的F11。

    2.8运行到下一个断点:c指令(continue指令)

    /

    2.9查看函数调用堆栈:bt指令

    /

    2.10跑完当前函数:finish指令

    finish可以挨个函数跑一遍,先粗略的确定是哪个函数的问题。

    2.11临时查看变量:p指令

    p 变量名

    临时查看变量的值。

    2.12长期监视/取消监视变量的值:display指令/undisplay指令

    监视:

    2.13跳转到某一行:until指令

    因为15行是空行所以跳到了第16行。

    需要在当前函数使用,不能乱跳转。

    2.14修改变量的值:set var指令

    set var i=50

    修改i为50。

    2.15显示当前函数内临时变量:info locals

    显示当前函数内的临时变量。

  • 相关阅读:
    自然科学领域期刊分区——什么是核心期刊(核心A、B、C)
    Java基础面试-BeanFactroy和ApplicationContext
    【JavaScript】深入浅出理解事件循环
    C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合
    ChromeDriver驱动最新版下载
    如何通过编码器信号计算输送线/输送带线速度(飞剪、追剪算法基础)
    如何恢复被MALLOX勒索病毒加密的重要数据?
    时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database
    软件过程的介绍
    公众号留言功能怎么恢复?评论功能如何开启?
  • 原文地址:https://blog.csdn.net/gfdxx/article/details/127608302
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号