任何正文都可以告诉我函数名存储在堆栈框架中的位置。我知道返回地址存储在链接寄存器(lr)中。但我的要求是实现回溯哪个打印功能名称我不想打印功能地址。
答案 0 :(得分:5)
您可以使用两个API backtrace()
和backtrace_symbols()
来打印回溯信息。请使用man backtrace
了解有关这两个API的更多详细信息。
至于功能名称,我不认为它是保存在堆栈框架中,你需要参考地图信息/符号表来找到它的地址。
答案 1 :(得分:1)
在C和C ++中,函数名称不存储在堆栈框架中。
答案 2 :(得分:0)
您可以使用预处理器符号:
__FILE__
和__LINE__
类似于:printf("File: " __FILE__ "in Line: " __LINE__);
返回当前文件和调用函数的行。请注意,该字符串存储在内存中。所以不要经常使用它。