如何获取调用当前函数的函数名?

时间:2012-11-29 03:25:52

标签: c function

在一个函数中,可以放(对于gcc)

printf("%s: I am here!", __FUNCTION__);

指示特定邮件的来源。现在,假设我有serval函数A1,A2,A3,...,它们都可以调用函数B()。我想知道是否有一种简洁的方法来指示哪个函数在运行时调用B()。

2 个答案:

答案 0 :(得分:2)

没有可移植的方法来做到这一点。但是,如果您想深入研究非便携式黑客的领域,GCC会提供__builtin_return_address(),您可以通过它获取返回地址。随后将该地址传递给dladdr(也是一个非标准函数,但在大多数类似unix的系统上都可用)将为您提供二进制级别的函数名称(可能与抽象程序级别的函数不同,如果发生了任何类型的内联,基于过程间分析的优化等。除了调试/分析之外,我不建议使用这些黑客。

我怀疑其他平台和编译器上存在类似的机制。

答案 1 :(得分:2)

你可以简单地使用backtrace()(也不是完全可移植的)

查看此链接: http://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html