1

在函数内部,可以放(对于 gcc)

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

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

4

2 回答 2

2

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

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

于 2012-11-29T03:33:04.110 回答
2

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

请参阅此链接: http ://www.kernel.org/doc/man-pages/online/pages/man3/backtrace.3.html

于 2012-11-29T03:35:56.780 回答