• Linux之实用GDB技巧


    一、引言

    在Linux下开发,肯定少不了与gdb打交道,而gdb的命令又非常多,有些是不常用的但是特殊情况下却是必须的,因此记录在此,以便翻阅

    二、基本命令

    前面是命令全名,在不混淆的情况下,可以简写为后面的单个字符

    list l : 列出源代码
    run r : 运行程序
    step s : 单步运行(进入函数内部)
    next n : 单步运行(跳过函数执行)
    continue c : 继续执行
    print p : 打印变量值

    p/x y:以16进制显示y的值,c表示字符,s表示字符创,f表示浮点数

    ptype student:打印student的结构

    finish fin:用于跳过s进入的函数的剩余部分。

    until u:用于在不进一步的循环中退出,即不执行剩余的循环。until也可以和break一样后面跟参数,指定位置。

    set x=12:把x的值设为12。

    set args 参数列表 : 设置程序启动参数

    info args:查看当前函数的参数
    set print elements 0:设置print打印的字符数

    s和n后面可以跟数字表示执行该命令的次数,例如s 3,表示连续执行step三次。

    三、断点

    b line : 加断点

    tbreak line : 临时断点,只有第一次遇到该断点时才有效
    info breakpoints :查看所有的断点

    disable breaknum:禁用断点

    enable breaknum:启用断点
    delete breaknum:此处的breaknum是断点的序号,即用info breakpoints命令显示的断点最前面的那个数字

    clear linenum:clear后的参数跟添加断点时是一样的,行号、函数名等。

    condition n z==1 : 为断点添加条件,该命令的作用是使用断点n当z=1时才生效。n是断点编号,z是变量

    watch z : 添加对变量z的监视器,当z的值变化时,程序即暂停

    watch (z > 10) : 表示当z>10是程序暂停,这样方便调试循环

    break break_arg if(condition):添加条件断点,break_arg是任何可以添加短点的位置,例如:break main if(argc>1)

    四、多线程调试

    info threads : 查看所有线程
    thread n : 跳到另外一个线程

    五、查看函数调用堆栈

    backstrace bt : 查看函数调用堆栈

    frame n : 查看函数调用堆栈中的某一层

    默认当前栈帧序号为0,父栈帧为1,以此类推。

    up/down命令分别可以调到父子栈帧

    六、查看代码对应的汇编代码

    disassemble /m main:查看main函数对应的汇编代码

    set disassemble-flavor intel:设置汇编会Intel的x86汇编格式

    info register:查看寄存器信息

  • 相关阅读:
    《RabbitMQ 实战》读书笔记
    使用jstack命令查看CPU高占用的问题记录
    两种常见的单元测试方式(笔记)
    Apache Solr入门教程(转)
    搜索引擎选择: Elasticsearch与Solr(转)
    CopyOnWriteArrayList与Collections.synchronizedList的性能对比(转)
    理解list和vector的区别
    从上往下打印出二叉树的每个节点,同层节点从左至右打印。
    TypeError: Object function (req, res, next) { app.handle(req, res, next); } has no method 'configure'
    Cannot find module 'crc'
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4204086.html
Copyright © 2020-2023  润新知