1. (gcc -o test -g test.c)
    2. gdb test (或gdb -q test 去除出现在屏幕上的其他信息)

    运行程序:(gdb) run
    设置断点:(gdb) break 12(行数或者函数名)
    跳转到下一个断点:(gdb) c
    继续执行下一步,直到退出函数:(gdb) n
    打印变量值:(gdb) print x(变量名)
    退出调试:(gdb) q

    查看代码:
    list默认参数可以用show listsize来查看,如果感觉10行太多或者太少,还可以用set listsize 来更改。
    list 还可以加上其他参数,比如:
    list 5,10 显示第5行到第10行的代码;
    list func 显示func函数周围的代码,显示范围和list参数有关;
    list test.c:5,10 显示源文件test.c第5行到第10行的代码,一般用于调试含多个源文件的程序。
    gdb 还支持字符串查找,search str,从当前行开始,向前查找含str的字符串;
    reverse-search str,从当前行开始,向后查找含str的字符串。

    gdb也支持linux命令的。
    eg : 可以在gdb的提示符中,输入shell,然后在输入你需要的命令就可以了
    (gdb) shell clear

    断点
    info breakpoints 看下设置的断点信息

    直接删除该断点,可以使用clear命令和delete命令。
    (gdb) clear 6 (6 是行数)
    clear命令后面的参数为设置断点的行号,clear后面参数还可以加设置断点的函数名。

    delete命令后面的参数为断点的编号;可以一次删除多个断点,断点编号之间用空格隔开;
    如果delete后没有参数,默认删除所以断点,会给出提示选择是否操作。

    实例:

    • 在编译时要加上-g选项,生成的可执行文件才能用gdb进行源码级调试:

    eg: $ gcc -g main.c -o main

    • 在提示符下直接敲回车, 表示重复上一条命令

    make编译并运行:
    2_1查看初始信息.png

    2_1编译并进入调试.png

    运行代码:
    2_2.png

    开始查看源码:
    2_查看源码失败.png

    发现无法查看源码,于是更改Makefile:
    2_更改MAKE.png
    更改为:
    2_2改正Makefile.png

    2_2改正M2.png

    更改Makefile后可以查看源码:
    2_查看源码1.png

    2_查看源码2.png

    设置断点后查看大断点信息:
    2_设置断点.png

    运行程序:
    2_运行程序.png

    发现结果非常正确;
    进入第一个断点,并通过step语句反复进入arrayfill_with中的for循环:
    ![2
    进入断点.png](https://cdn.nlark.com/yuque/0/2019/png/263367/1560777950445-f6e2648b-4f97-4429-8b81-0a642d5d04ab.png#align=left&display=inline&height=209&name=2_%E8%BF%9B%E5%85%A5%E6%96%AD%E7%82%B9.png&originHeight=415&originWidth=1088&size=70175&status=done&width=548)

    多次回车继续调用step命令,查看最后一部,运行到第i = 16,array[16] = 10;(i++,i==17时结束循环)
    (这里就发现了问题,数组大小为16,应该只能对i=15赋值10,所以这里有错误,数组赋值越界了!!)

    2_进入断点查询最后的变量.png

    查看堆栈,并查看当前的数组:
    2_进入断点查看堆栈和变量.png

    继续进入第二个断点:
    2_结束第一个断点.png

    同理,查看第二个arrayfill_with()语句,多次step后查看最后一步,
    运行到第i = 16,array[16] = 55;
    ![2
    进入第二个断点查看最后的变量.png](https://cdn.nlark.com/yuque/0/2019/png/263367/1560778422328-4d2d92a5-1b8f-46bd-98da-11a1679465f8.png#align=left&display=inline&height=319&name=2_%E8%BF%9B%E5%85%A5%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%96%AD%E7%82%B9%E6%9F%A5%E7%9C%8B%E6%9C%80%E5%90%8E%E7%9A%84%E5%8F%98%E9%87%8F.png&originHeight=363&originWidth=638&size=38694&status=done&width=561)

    查看断点结束后的堆栈,和数组信息
    2_结束第一个断点后的堆栈.png

    使用continue执行完剩下的步骤
    2_结束断点.png