编程语言
首页 > 编程语言> > 以编程方式在C中记录函数的调用者

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

作者:互联网

这个问题已经在这里有了答案:            >            print call stack in C or C++                                    12个
我有一个Mutex对象,该对象的锁定功能在某些条件/时间神秘地被多次调用(它通过内部的每个线程计数器进行跟踪并以固定频率报告总发生次数).如果我可以在代码中添加检查,例如在固定时间段中每100个左右调用一次,它将记录谁调用它,以更好地了解谁可能出错,这将是一件很不错的事情.我认为应该可以通过一些堆栈跟踪来实现,但是我不确定从哪里开始或要引用什么.有没有简单的方法可以解决这个问题?

解决方法:

这可能是我推荐宏的几次机会之一.

将要调用的函数的名称更改为对原始函数的轻微改动,例如Mutex :: get更改为Mutex :: get_with_mapping,并添加一个额外的参数以获取字符串常量以获取位置信息.

编写宏以将旧函数名称包装在对新函数的调用周围,从而将当前函数的预处理器令牌放入宏中:

#define get() get_with_mapping(__func__)

将此宏放在Mutex对象的头文件的底部,以免与Mutex对象的定义混淆.希望此宏不会破坏包含它的源文件中不应包含的任何内容.

修改get(现在称为get_with_mapping)函数以保留传递给它的所有位置的记录.您也可以在签名中添加文件名和行号.

标签:stack-trace,linux,c-4
来源: https://codeday.me/bug/20191029/1960012.html