1

可能重复:
打印 C 或 C++ 中的调用堆栈

通常在调试代码时,我需要弄清楚谁在调用我在其中放置了调试语句的函数。我知道它__FUNCTION__的计算结果是当前函数的名称,但是是否有类似的东西会给我被调用者的名称? 或者也许打印出调用堆栈?

信息必须可用。如果我输入一个会发生段错误的断言或代码,我会得到一个显示整个调用堆栈的堆栈跟踪。堆栈跟踪打印代码从哪里获得该信息?

如果您无法生成与平台无关的解决方案,那么可以在 x86_64 Ubuntu 12.04 上编译的东西gcc就可以了。为其他平台提供解决方案的奖励积分。

4

3 回答 3

1

这取决于操作系统。

在 Linux 和 gcc 上,使用backtrace(3). 对于 Windows,请参阅这个 SO question

于 2012-08-14T21:00:38.810 回答
0

堆栈跟踪通过遍历调用堆栈以查找返回地址并遍历可执行文件以查找返回地址返回到哪个函数来获取该信息。那里没有便携的东西。没有找到来电者的一​​般方法。您可以做的最好的事情是在调试器下运行并设置断点以在调试代码触发时触发。

此外,__FUNCTION__它不是标准 C++ 的一部分。在我看来,这是一个 GNU 的东西。

于 2012-08-14T20:54:28.083 回答
0

它不会给你调用者的名字,但内部函数_ReturnAddress()通常会返回一个指向调用者的指针。

于 2012-08-14T21:08:07.413 回答