【发布时间】:2017-01-30 05:06:04
【问题描述】:
gcc的-finstrument-functions选项有没有办法获取gcc的__LINE__等当前函数的行号。
【问题讨论】:
标签: linux gcc linux-kernel linux-device-driver
gcc的-finstrument-functions选项有没有办法获取gcc的__LINE__等当前函数的行号。
【问题讨论】:
标签: linux gcc linux-kernel linux-device-driver
不,您只能在预处理时访问__LINE__,而__cyg_profile 函数会在很久以后插入。您可以做的是获取返回地址(通过__builtin_return_address)并在运行时对其进行符号化(例如通过调用addr2line)。当然,这只有在调用者的代码使用 debuginfo 编译时才有效。
编辑
正如下面 Tsyvarev 所指出的,__builtin_return_address 不需要,因为__cyg_profile 将函数地址作为参数。
【讨论】:
__builtin_return_address(2)
2?您只需要调用者的返回地址,即__builtin_return_address(1)。
this_fn 作为第一个参数,即函数的起始地址。所以__builtin_return_address 根本不需要。