从堆栈框架获取函数名称

时间:2015-06-23 16:16:26

标签: c++ assembly

假设我有一些功能:

void func1 (){
   ...
}

void func2(){
   ...
}

int main(){
func1();

//check called functions

return 0;
}

我想检查哪个函数被调用。这是func1。我可以为此制作一个更特殊的检查功能。但是有可能获得函数的名称,该函数是从堆栈框架调用的吗?

2 个答案:

答案 0 :(得分:1)

编译代码时,此信息不再为人所知。您可以使用ad hoc解决方案,例如函数本身的返回函数名称(使用__FUNCTION__宏来简化您的生活)。当然,这将是非常丑陋的。

答案 1 :(得分:1)

我建议不要直接调用函数,而是使用函数对象:

struct func_base
{
  virtual const std::string& get_function_name(void) const = 0;
  virtual void execute(void) = 0;
  void operator() (void)
  {
    execute();
  }
};

这将允许您检索您执行的函数的名称。