GDB常用命令笔记

  • Post author:
  • Post category:其他




GDB笔记



分享一下我使用gdb时经常使用的命令,希望能给到您帮助~

编译生成执行文件:

g++ main.cpp -o main -g

编译时要加上

-g

选项表示debug模式

使用GDB调式:

gdb main

  • 运行


    run

    |

    r

    : 运行程序,当遇到断点的时候,程序会在断点处停止运行,等待用户输入下一步的命令。

    用法:一般是打完断点后,执行

    run

    ,或简写

    r


    start

    :运行,从第一条语句开始


    continue

    |

    c

    :继续执行,直到下一个断点处(或运行结束)。


    step

    |

    s

    :执行下一句,如果下一执行语句为函数,进入函数


    next

    |

    n

    |

    换行

    :执行下一句,不进入函数


    finish

    :从内部函数执行完并返回外部函数。


    finish



    step

    操作是相对的


  • 打断点



    break 行号

    |

    b 行号

    :对当前正在执行的文件的指定行号位置设置断点。


    break 文件名:行号

    |

    b 文件名:行号

    :对指定文件的指定行号位置设置断点。


    break 函数名

    |

    b 函数名

    :对当前正在执行的文件的指定函数位置设置断点。


    break 文件名:函数名

    |

    b 文件名:函数名

    :对指定文件的指定函数位置设置断点


    tb 行号

    :一次性断点,temporary breakpoint


    tb 函数名

    :同上


    info breakpoint

    |

    i b

    :查看已设置的断点


    enable 断点号

    :使断点生效


    disable 断点号

    :使断点失效


    delete 断点号

    :删除断点

    还可以搭配 if 语句


    b 行号 if 条件表达式

    :if条件满足时,停在该行

    下面展示具体的条件表达式,不过不同的是给函数打断点:


    b 函数名 if name == 0

    :if 条件满足时,才停在函数名这行上


    保存断点信息



    如果花了很多时间打了一堆有用的断点信息,避免退出gdb后重复打断点,可以使用下面的命令,来保存断点信息,下次进入gdb直接导入上次设置的断点记录即可:


    save breakpointes 文件名.gdb

    :保存断点信息。

    进入gdb后,

    source 文件名.gdb

    ,加载断点信息。

  • 查看值


    display

    变量:显示变量,会在窗口一直显示变量

    取消用

    undisplay display编号



    i display

    可以查看

    display

    编号


    watch变量

    :监视修改的变量,可以搭配条件 watch 变量 if条件表达式


    rwatch变量

    :读取该变量的时候,终止一下。


    print 变量

    |

    p 变量

    :打印变量,一次性显示。


  • layout src

    :使用窗口查看源代码


  • tui enable

    :和上面一样的功能



    (

    )

    (建议只记这个,这也是我经常用到的命令)






    (
























































    )





  • layout asm

    :使用窗口查看汇编源码

其他技巧

一、 查看智能指针指向的数组所有元素:

  • 普通指针的情况:

    int* p = new int[10];
    

    在gdb中,可以通过

    display *p@10

    ,查看指针p指向的数组首地址连续的10个存储单元的值。

  • 那么智能指针如何处理呢?

    其实智能指针中存在get()成员函数,它可以返回原始指针,所以可以利用这个函数,假设p为智能指针变量,在gdb中可以如下进行打印:

    display *((p.get())@10
    

二、gdb 查看二维数组

比如,要查看

arr[3][4]

中的全部元素:

display *arr[0]@4	//@4表示4个列元素
display *arr[1]@4
display *arr[2]@4



版权声明:本文为Tsing12138原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。