2012-11-29 91 views
1

在函数,一个可以把(对于GCC)如何获取调用当前函数的函数名称?

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

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

+1

,通过'__func__'作为参数。在你调用它时永远不会改变的额外参数的情况下,你可能会发现一个有用的宏来调用它。 – chris

回答

2

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

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

相关问题