是否可以调试打印当前函数的调用者?

时间:2012-08-14 20:48:49

标签: c++ debugging callstack

  

可能重复:
  print call stack in C or C++

通常在调试代码时我需要弄清楚谁在调用我已放置调试语句的函数。我知道__FUNCTION__计算当前函数的名称,但有类似的东西吗会给我一个被叫者的名字吗?或者打印掉调用堆栈?

必须提供相关信息。如果我输入一个断言的断言或代码,我会得到一个显示整个调用堆栈的堆栈跟踪。堆栈跟踪打印代码在哪里获取该信息?

如果您无法生成与平台无关的解决方案,那么可以在使用gcc编译的x86_64 Ubuntu 12.04上运行的解决方案。为其他平台提供解决方案的奖励点。

3 个答案:

答案 0 :(得分:1)

这取决于操作系统。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

它没有为您提供调用者的名称,但内部函数_ReturnAddress()通常会返回指向调用者的指针。