在一个函数中,可以放(对于gcc)
printf("%s: I am here!", __FUNCTION__);
指示特定邮件的来源。现在,假设我有serval函数A1,A2,A3,...,它们都可以调用函数B()。我想知道是否有一种简洁的方法来指示哪个函数在运行时调用B()。
答案 0 :(得分:2)
没有可移植的方法来做到这一点。但是,如果您想深入研究非便携式黑客的领域,GCC会提供__builtin_return_address()
,您可以通过它获取返回地址。随后将该地址传递给dladdr
(也是一个非标准函数,但在大多数类似unix的系统上都可用)将为您提供二进制级别的函数名称(可能与抽象程序级别的函数不同,如果发生了任何类型的内联,基于过程间分析的优化等。除了调试/分析之外,我不建议使用这些黑客。
我怀疑其他平台和编译器上存在类似的机制。
答案 1 :(得分:2)
你可以简单地使用backtrace()
(也不是完全可移植的)
查看此链接: http://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html