![]() |
1
3
您应该询问的不是GDB,而是您正在使用的特定pthread库和操作系统。 pthread库通过一组系统调用与内核协作实现互斥锁。如果它的互斥锁实现嵌入了一些东西来将持有互斥锁的最后一个线程绑定到互斥锁数据结构中,那么可以使用GDB获取该信息。
但这一切都取决于你的系统-你的pthread库和操作系统内核-而不是GDB。
您还可以尝试创建类型为
|
![]() |
2
5
在至少一种Linux的味道上,C++ 11 STD::互斥体有一个名为“y-Ox所有者”的成员,它包含当前具有互斥锁的线程的线程ID。在gdb中使用“info threads”显示gdb使用的线程号和线程id(参见“LWP”号),允许您切换到该线程(“thread N”),然后检查调用堆栈(“backtrace”)。 |
![]() |
3
2
GDB公司 能够显示此信息,但它们没有实现此功能:它需要调试器和线程库之间的合作,尽管 libthread_db 图书馆。 feature (寻找 部分) |