美文网首页
GDB常用命令记录

GDB常用命令记录

作者: SetDefault__ | 来源:发表于2018-07-08 11:45 被阅读0次

    1. 编译时允许gdb: 在编译命令中加入-g

    gcc/g++ filename.c/cpp -Wall -o a.out -g

    2. 启动gdb

    gdb

    3.调试某文件

    file a.out

    最常用的10个命令

    1) file <文件名>:加载被调试的可执行程序文件。

    2) start: 启动程序并在主程序入口处等待。

    3) r: run的缩写,从头运行被调试的程序。如果程序中没有断点,执行完整个程序;如果有断点,程序暂停在第一个运行到的断点处。

    4) c: continue的缩写,继续执行被调试程序,直至下一个断点或程序结束。

    5) b: breakpoint的缩写, 设置断点,断点编号从1开始递增。 用法包括: 

        b <行号>

        b <函数名称>

        b *<函数名称>

        b *<代码地址>

    其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。

    d: delete breakpoint 的缩写。删除指定编号的某个断点,或删除所有断点。

    举个栗子:

    b 8 【第八行加入一个断点,编译器会显示加入第一个断点1, e.g. Breakpoint 1 at 0x400581: file a.c, line 8.】

    b main【main函数入口加入一个断点,会被自动编号为2】

    b foo 【foo函数入口加入新断点,自动编号为3】

    d 1【删除第一个breakpoint】

    d 【删除全部breakpoints,命令行会有提醒。。。】

    6)s: step的缩写, 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;s 相当于其它调试器中的“Step Into (单步跟踪进入)”。

    n: next的缩写,执行一行源程序代码,此行代码中的函数调用也一并执行。n 相当于其它调试器中的“Step Over (单步跟踪)”。

    这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。

    si, ni

    si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。

    7)p <变量名称>:print的缩写,显示指定变量(临时变量或全局变量)的值。

    8)l:list的缩写,查看当前位置代码。

    9)q:quit的缩写,退出GDB调试环境。

    10) layout src显示源码窗口! 比list好用!

    Ctrl-x a回到传统模式

    ----------------------------------------------分割线-----------------------------------------------------------------

    GDB Layout命令

    命令功能

    layout src显示源码窗口

    layout asm显示汇编窗口

    layout split显示源码 & 汇编窗口

    layout regs显示汇编 & 寄存器窗口

    layout next下一个layout

    layout prev上一个layout

    C-x 1单窗口模式

    C-x 2双窗口模式

    C-x a回到传统模式

    GDB 跳转执行命令

    命令功能

    start开始启动程序,并停在main第一句等待命令

    step执行下一行语句, 如语句为函数调用, 进入函数中

    next执行下一行语句, 如语句为函数调用, 不进入函数中

    finish连续运行到当前函数返回为止

    continue从当前位置继续运行程序

    return强制令当前函数返回

    call func()强制调用函数, 也可以用print func()

    run从头开始运行程序

    quit退出程序

    注: call func() 与 print func() 的区别,在于调用void函数时, call func()没有返回值, 而print有~~

    GDB调试输出命令

    命令功能

    print输出变量值 & 调用函数 & 通过表达式改变变量值

    info var查看全局 & 静态变量

    info locals查看当前函数局部变量

    list查看当前位置代码

    backtrace查看各级堆栈的函数调用及参数

    set var 变量=xx将变量赋值为xx

    注:

    p/x 3*i  --  x for hexadecimal, o for octal, d for decimal, f for float, c for char, s for string

    断点

    命令功能

    b N_LINE在第N_LINE行上设置断点

    b func在func函数上设置端点

    delete breakpoints删除断点

    disable breakpoints禁用断点

    enable 断点号启动端点

    info breakpoints查看断点列表

    break foo if x>0设置条件断点

    观察点

    当待观察点被读 或 被写时,程序停下来,并输出相关信息

    命令功能

    watch设置写观察点

    rwatch设置读观察点

    awatch设置读写观察点

    info watchpoints查看观察点列表

    Display跟踪点

    命令功能

    display var每次停下来时,显示设置的变量var的值

    undisplay取消跟踪显示

    info display设置读写观察点

    info watchpoints查看跟踪列表

    分割线前源自:

    https://blog.csdn.net/liigo/article/details/582231

    分割线后部分来自:

    作者:rh_Jameson

    链接:https://www.jianshu.com/p/6cdd79ed7dfb

    來源:简书

    ------------------------------------newly added @20180705------------------------------------------

    查看栈信息

    bt: backtrace的缩写

    相关文章

      网友评论

          本文标题:GDB常用命令记录

          本文链接:https://www.haomeiwen.com/subject/nohuuftx.html