__builtin_return_address returns null for index >0?

前端 未结 2 1901
我在风中等你
我在风中等你 2021-01-20 16:32

I want to get the return address of the caller function. I\'m using __builtin_return_address() funtion, but if I give index value greater than 0 it is returning

2条回答
  •  滥情空心
    2021-01-20 17:05

    In addition to compiler optimisation reasons (which IMO is the most likely reason for the issue you're facing), the GCC documentation states quite plainly:

    Calling this function with a nonzero argument can have unpredictable effects, including crashing the calling program. As a result, calls that are considered unsafe are diagnosed when the -Wframe-address option is in effect. Such calls should only be made in debugging situations.

    As Basile said, since it's a compiler builtin (read: very processor specific and a bad idea to use) the behaviour is exceptionally loosely defined (as it is not required by any standards and does not have to make any guarantees).

    Just use backtrace(3), it's POSIX-compliant and doesn't rely on compiler builtins.

提交回复
热议问题