我正在尝试调试一个非常罕见的死锁,并且我已将其范围缩小到 pthread_mutex 的问题,它是类型 1(递归)。我想追踪这个互斥锁的来源,因为我们所有的代码都使用普通的互斥锁,我认为检测互斥锁类型 == 何时递归以追溯它是有意义的。
我尝试在 pthread_mutex_lock 中设置手动断点,通过堆栈指针取消引用 pthread_mutex_t 等以检查其类型,但这被称为数百万次,并且需要永远捕捉互斥类型 == 递归的情况。
我还尝试插入一个库并替换 pthread_mutex_lock 以使在互斥锁类型上设置断点成为可能,但这没有得到任何命中(不相信这是捕获所有对 pthread_mutex_lock 的调用)
我觉得gdb中必须有一种方法可以为每当使用递归类型的互斥锁调用pthread_mutex_lock时设置观察点/条件断点?
对上述任何帮助将不胜感激。提前致谢。