__builtin_return_address 对于索引 >0 返回 null?

Vis*_*lla 6 c linux linux-device-driver linux-kernel

我想获取调用者函数的返回地址。我正在使用__builtin_return_address()function,但如果我给出的索引值大于 0,它将返回NULL.

请帮我解决这个问题,或者告诉我任何其他功能来获得相同的效果。

Bas*_*tch 6

请参阅相关问题的答案。

__builtin_return_addressGCC和处理器特定的(在某些处理器上的某些版本的Clang中也可用,但缺乏一些优化),并记录为

在某些机器上,可能无法确定除当前函数之外的任何函数的返回地址

编译器可能会在没有相关信息的情况下优化函数(例如,当使用-fomit-frame-pointer、 或用于尾调用或通过函数内联进行编译时)。

所以您可能会收到这样的信息,NULL因为信息不可用!