我有一个Mutex对象,其锁定功能在某些条件/时间内被神秘地调用多次(它通过内部每线程计数器跟踪并报告固定频率上的总发生次数)。如果我可以在代码中添加一个检查,那将是很好的,例如,在它记录的固定时间段中每100次左右的调用,它会调用它来更好地了解谁可能有错。我认为这应该可以通过一些堆栈跟踪的东西,但我不知道从哪里开始或引用什么。有一个简单的方法可以解决这个问题吗?
答案 0 :(得分:4)
这可能是我推荐宏的几次之一。
将要调用的函数的名称更改为原始文件的轻微修改,例如Mutex::get
到Mutex::get_with_mapping
,并添加一个额外的参数以使字符串不变为位置信息。
编写一个宏来围绕对新函数的调用包装旧函数名称,为宏中的当前函数放置预处理器标记:
#define get() get_with_mapping(__func__)
将此宏放在Mutex对象的头文件的底部,这样它就不会搞乱Mutex对象的定义。希望这个宏不会破坏包含它的源文件中不应该包含的任何东西。
修改get(now get_with_mapping)函数以保留传入其中的所有位置的记录。您还可以在签名中添加文件名和行号。