以编程方式在C ++中记录函数的调用者

时间:2014-06-16 14:39:11

标签: c++ linux stack-trace

我有一个Mutex对象,其锁定功能在某些条件/时间内被神秘地调用多次(它通过内部每线程计数器跟踪并报告固定频率上的总发生次数)。如果我可以在代码中添加一个检查,那将是很好的,例如,在它记录的固定时间段中每100次左右的调用,它会调用它来更好地了解谁可能有错。我认为这应该可以通过一些堆栈跟踪的东西,但我不知道从哪里开始或引用什么。有一个简单的方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

这可能是我推荐宏的几次之一。

将要调用的函数的名称更改为原始文件的轻微修改,例如Mutex::getMutex::get_with_mapping,并添加一个额外的参数以使字符串不变为位置信息。

编写一个宏来围绕对新函数的调用包装旧函数名称,为宏中的当前函数放置预处理器标记:

#define get() get_with_mapping(__func__)

将此宏放在Mutex对象的头文件的底部,这样它就不会搞乱Mutex对象的定义。希望这个宏不会破坏包含它的源文件中不应该包含的任何东西。

修改get(now get_with_mapping)函数以保留传入其中的所有位置的记录。您还可以在签名中添加文件名和行号。