Gcc扩展语法之你从哪里来

郑工昨天问我,这样一个问题:“我想知道是谁调用了这个函数”,他在解决一个关于wifi的bug。

我想了一会儿说,在代码中插入一个空指针,让内核报一个空指针异常,可以打印一个栈帧信息。看到出错函数的调用关系。

可是还是有点麻烦,有木有,一种方式能够知道这个问题呢?自然是有的。

 

我们的函数总是“被”调用的。你可以想一下,main函数是被谁调用的?

也就是说无论怎么样,计算机都有一个控制流的执行起点,当需要完成某种特定的功能时,我们还需要调用一些已经存在的函数帮助我们。执行完以后还要返回到原来的函数。

在操作系统中,这些东东由一个叫做栈的区域去保存防止程序出错,帧是一大片连续的存储区,里面分成若干栈帧,它是栈的基本单位。

而栈帧的意义在于存储与当前正在执行的函数相关的信息。

 

 

stackframe

调用者的信息

被调用者的信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值