在函数,一个可以把(对于GCC)如何获取调用当前函数的函数名称?
printf("%s: I am here!", __FUNCTION__);
以指示一个特定的消息来自。现在,假设我有函数A1,A2,A3,...,它们都可以调用函数B()。我想知道是否有一个简洁的方法来指示哪个函数在运行时调用B()。
在函数,一个可以把(对于GCC)如何获取调用当前函数的函数名称?
printf("%s: I am here!", __FUNCTION__);
以指示一个特定的消息来自。现在,假设我有函数A1,A2,A3,...,它们都可以调用函数B()。我想知道是否有一个简洁的方法来指示哪个函数在运行时调用B()。
你可以简单地使用backtrace()
(这是不完全可移植的任一)
请参阅此链接:如果你想有一个标准的方式 http://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html
有没有便携的方式来做到这一点。但是,如果您想深入研究非便携式黑客领域,GCC会提供__builtin_return_address()
,您可以通过它获取返回地址。随后将该地址传递给dladdr
(也是一个非标准函数,但在大多数类Unix系统上可用)将给出该函数在二进制级别的名称(如果任何种类的内联可能与抽象程序级别的函数不同,基于程序间分析的优化等等)。除了调试/分析外,我不会推荐使用这些黑客技术。
我怀疑在其他平台和编译器上存在类似的机制。
,通过'__func__'作为参数。在你调用它时永远不会改变的额外参数的情况下,你可能会发现一个有用的宏来调用它。 – chris