GDB常用命令笔记

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:从内部函数执行完并返回外部函数。

    finishstep操作是相对的

  • 打断点
    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

你可能感兴趣的:(debug,c++,linux)