__builtin_return_address
是 GCC 提供的一个内建函数,用于获取当前函数调用栈中指定帧的返回地址。该函数常用于调试和性能分析,帮助开发者理解程序中的函数调用关系。以下通过具体示例说明其使用方法,并结合不同参数(0/1/2)的场景分析
(一)功能说明
__builtin_return_address(level)
返回当前函数或其调用链中某一层函数的返回地址。其中 level
参数表示调用栈的深度:
level=0
时,返回当前函数的返回地址(即调用者执行call
指令后压栈的地址)。level>0
时,返回调用链中更上层函数的返回地址(例如level=1
返回调用者的调用者的地址)
#include <stdio.h>
void funcB() {
void *returnAddr = __builtin_return_address(0);
// 获取 funcB 的返回地址(即 funcA 中调用 funcB 的下一条指令地址)
printf("funcB will return to: %p\n", returnAddr);
}
void funcA()