其中函数名存储在ARM7l的堆栈帧中(链接寄存器中的函数地址不是" lr")

时间:2016-04-18 05:12:56

标签: c linux unix arm

任何正文都可以告诉我函数名存储在堆栈框架中的位置。我知道返回地址存储在链接寄存器(lr)中。但我的要求是实现回溯哪个打印功能名称我不想打印功能地址。

3 个答案:

答案 0 :(得分:5)

您可以使用两个API backtrace()backtrace_symbols()来打印回溯信息。请使用man backtrace了解有关这两个API的更多详细信息。

至于功能名称,我不认为它是保存在堆栈框架中,你需要参考地图信息/符号表来找到它的地址。

答案 1 :(得分:1)

在C和C ++中,函数名称不存储在堆栈框架中。

答案 2 :(得分:0)

您可以使用预处理器符号: __FILE____LINE__ 类似于:printf("File: " __FILE__ "in Line: " __LINE__);

返回当前文件和调用函数的行。请注意,该字符串存储在内存中。所以不要经常使用它。