Linux第二课:LinuxC高级 学习记录day05

9、gdb 调试

        用于调试代码种逻辑错误,而非语法错误

9.1、gdb调试流程

1、生成可以使用gdb调试的执行文件、

        gcc -g xxx.c        // 生成的文件可以使用gdb调试

2、进入gdb工具

        gdb 可执行文件        // 使用gdb工具开始调试可执行文件

        r/run        // 运行代码

        l/list        // 显示当前行下面10行代码

        b/break 函数名或者行数        // 添加断点

        info b        // 查看断点信息

        d/delete num        // 删除断点

        n/next        // 单步调试程序,如果是函数则整体执行,不会进入函数内部

        s/step        // 单步调试程序,如果是函数则进入函数内部

        p/print        // 查看变量的值

运行代码
查看代码
设置断点

在 add 函数处添加断点,然后运行程序,就会停在第5行,实际是从12行调用到第5行,也就是add中return的位置 

执行 n,继续走一行,来到第6行
再执行n,也就是return返回,来到第13行
查看断点
删除断点
通过core文件,查看段错误

 10、指针与函数

10.1、指针函数

        本质上是函数,函数的返回值是地址

        存储类型 数据类型 *函数名(形参)

        {

                函数体;

                return 地址;

        }

10.2、函数指针

10.2.1、函数指针定义

        本质上是指针,指向函数的指针——函数名

        存储类型 数据类型 (*函数指针名)(形参列表)

                // 数据类型:指向函数的返回值类型一致

                // 指向函数的参数列表,数据类型一致(只写数据类型即可)

 10.2.2、通过函数指针,调用函数

        指针完全代替函数名

        函数指针可以函数作为参数传递给其他函数调用

        返回值和参数为空

函数指针指向指针函数

1. char *fun(int a, int b);
    char *(*p)(int, int) = fun;

2. void fun1(char *spl, int **st, int n);
    void (*p)(char *, int **, int) = fun1;

3. void *fun2(int (*sp)[3], int m)
     void *(*p)(int (*)[3], int) = fun2;

10.3、函数指针数组

        本质是数组,元素同类型的函数指针,函数的参数和返回值都相同

10.3.1、定义格式

        存储类型 数据类型 (*名[元素个数])(形参列表)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值