Arm64下的通过builtin_frame_address来回溯函数栈帧
时间: 2023-10-08 08:07:46 浏览: 36
在 ARM64 架构下,可以使用 `__builtin_frame_address` 内建函数来回溯函数栈帧。该函数的原型为:
```c
void* __builtin_frame_address(unsigned int level);
```
其中,`level` 参数表示要回溯的栈帧层数,0 表示当前函数的栈帧,1 表示调用当前函数的函数的栈帧,以此类推。该函数会返回对应栈帧的栈顶地址,可以通过该地址来访问栈帧中的局部变量、参数等信息。
需要注意的是,使用该函数需要开启编译器优化选项 `-fomit-frame-pointer`,否则函数调用时会额外保存和恢复栈帧指针,导致栈帧地址计算错误。