码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • gdb调试常见命令详细总结


    gdb调试常见命令

      • 运行(run/continue/next/step/until/finish/call/quit)
      • 断点
            • 显示当前程序的断点设置情况
            • 设置断点(在某个函数入口或指定行号处)
            • 暂停设置的断点(可再次开启)
            • 清除断点(delete/clear)
      • 函数堆栈中进行调试
            • 对于当前状态(可以是发生崩溃后)返回上/下一层调用函数
            • 查看当前调用函数堆栈列表
            • 跳转到堆栈中的某个函数
      • 打印信息
            • set命令传参或修改参数值进行调试
            • 查看某个变量或者表达式的值
            • 查看某个内存地址中的值
            • 查看当前文件的程序语言
      • 分割窗口
            • 分割窗口,一边查看代码一边测试

    参考链接
    layout很有用

    运行(run/continue/next/step/until/finish/call/quit)

    run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入;
    continue(简写c):继续执行,到下一个断点处(无断点即执行到结束或崩溃)
    next(简写n): 单步跟踪程序,当遇到函数调用时,直接调用,不进入函数;
    step(简写s):单步调试如果有函数调用,则进入函数,与命令n区分;
    until:运行程序直到退出循环体; / until+行号: 运行至某行(退出循环)
    finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。(退出函数)
    call 函数(参数):调用函数并传递参数,如:call gdb_test(55)
    quit:简记为 q ,退出gdb

    断点

    显示当前程序的断点设置情况
    info breakpoints
    
    • 1
    设置断点(在某个函数入口或指定行号处)
    break +函数名/行号
    
    • 1
    暂停设置的断点(可再次开启)
    disable [breakpoints] [num…]
    #breakpoints 参数可有可无;num…表示可以有多个参数
    #如果指定 num…,disable 命令会禁用指定编号的断点;反之若不设定 num…,则 disable 会禁用当前程序中所有的断点。
    enable +num 
    #可再次开启某号断点。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    eg:

    (gdb)dis 1 #表示禁用断点1
    
    • 1
    清除断点(delete/clear)
    delete 断点号n:删除第n个断点
    clear 行号n:清除第n行的断点
    
    • 1
    • 2

    函数堆栈中进行调试

    对于当前状态(可以是发生崩溃后)返回上/下一层调用函数
    up 
    #返回到达当前步骤的上一步
    
    • 1
    • 2
    down
    #进入下一个堆栈中的函数
    
    • 1
    • 2
    查看当前调用函数堆栈列表
    (gdb) backtrace [-full] [n]
    
    • 1
    (gdb)bt
    
    • 1
    跳转到堆栈中的某个函数

    该命令会依次打印出当前栈帧的如下信息:
    1、当前栈帧的编号,以及栈帧的地址;
    2、当前栈帧对应函数的存储地址,以及该函数被调用时的代码存储的地址
    3、当前函数的调用者,对应的栈帧的地址;
    4、编写此栈帧所用的编程语言;
    5、函数参数的存储地址以及值;
    6、函数中局部变量的存储地址;
    7、栈帧中存储的寄存器变量。

    frame
    
    • 1

    eg :

    f 2
    #跳转到堆栈中 编号为2的函数中
    
    • 1
    • 2

    打印信息

    ctrl + x + a 快捷键可以浏览当前所在代码上下几行。

    set命令传参或修改参数值进行调试

    set args作为程序运行时参数

    #include 
    int main(int argc,char**argv){
            printf("argv[0] is %s\n",argv[0]);
            printf("argv[1] is %s\n",argv[1]);
            printf("argv[2] is %s\n",argv[2]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    #调试运行结果
    (gdb) set args hello world
    (gdb) r
    Starting program: /home/huqw/test/a.out hello world
    argv[0] is /home/huqw/test/a.out
    argv[1] is hello
    argv[2] is world
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    set还可以将变量的值进行修改,可以查看自己期待得到的结果

    #include
    int main(){
            int a = 5;
            printf("a is %d\n",a);
            printf("a is %d\n",a);
            return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    Breakpoint 1, main () at set_param.c:4
    4		printf("a is %d\n",a);
    (gdb) n
    a is 5
    5		printf("a is %d\n",a);
    (gdb) print a
    $1 = 5
    (gdb) set var a=3
    (gdb) print a
    $2 = 3
    (gdb) n
    a is 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    查看某个变量或者表达式的值

    print 表达式:简记为 p ,其中“表达式”可以是任何当前正在被测试程序的有效表达式,比如当前正在调试C语言的程序,那么“表达式”可以是任何C语言的有效表达式,包括数字,变量甚至是函数调用。
    display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后,它将在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a
    watch 表达式:设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序。如: watch a

    查看某个内存地址中的值
    x :查看内存地址中的值
    x/[number][format] <addr>
    其中number,format和u都是可选参数,addr为查看变量的内存地址
    
    • 1
    • 2
    • 3

    eg :

    (gdb) print input
    (gdb) x/20 0x400c90
    #表示查看0x400c90到向后0x400c90+20的内容
    
    • 1
    • 2
    • 3
    查看当前文件的程序语言
    info source
    #会显示当前文件名,编译路径
    
    • 1
    • 2

    分割窗口

    分割窗口,一边查看代码一边测试
    layout
    
    • 1
  • 相关阅读:
    随机森林算法
    Android学习笔记 7. ToolBar
    Spring Cloud Alibaba——Sentinel持久化和集群流控
    Nacos服务心跳和健康检查源码介绍
    外汇天眼:3天80%收益!推荐人还有10%的推荐奖金!CoinFxOnline被警告!
    C# Onnx Yolov8 Fire Detect 火焰识别,火灾检测
    SpringBoot2 +vue2 + shiro 集成山东通 auth2 方式单点登陆
    AbstractQueuedSynchronizer之AQS
    使用matlab,求解该方程的数值解,并分别画出状态变量的时间响应图、相空间的三维图
    【冰糖Python】__name__ 和 __file__
  • 原文地址:https://blog.csdn.net/weixin_43786143/article/details/127883917
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号