zoukankan      html  css  js  c++  java
  • 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:查看寄存器信息

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4204086.html
Copyright © 2011-2022 走看看