【问题标题】:Printing line number through -finstrument-functions option of gcc通过 gcc 的 -finstrument-functions 选项打印行号
【发布时间】:2017-01-30 05:06:04
【问题描述】:

gcc的-finstrument-functions选项有没有办法获取gcc的__LINE__等当前函数的行号。

【问题讨论】:

    标签: linux gcc linux-kernel linux-device-driver


    【解决方案1】:

    不,您只能在预处理时访问__LINE__,而__cyg_profile 函数会在很久以后插入。您可以做的是获取返回地址(通过__builtin_return_address)并在运行时对其进行符号化(例如通过调用addr2line)。当然,这只有在调用者的代码使用 debuginfo 编译时才有效。

    编辑

    正如下面 Tsyvarev 所指出的,__builtin_return_address 不需要,因为__cyg_profile 将函数地址作为参数。

    【讨论】:

    • 但是我的是ARM架构,不支持__builtin_return_address(2)
    • 嗯,但为什么要2?您只需要调用者的返回地址,即__builtin_return_address(1)
    • Profile 函数接受this_fn 作为第一个参数,即函数的起始地址。所以__builtin_return_address 根本不需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2020-11-09
    • 2012-04-12
    相关资源
    最近更新 更多