使用 Windows CRITICAL_SECTION
,我可以通过展开变量来查看锁定它的线程:
但是,我似乎无法对 std::mutex
做同样的事情,而是得到了很多无用的值:
有没有不需要修改我的代码的解决方法?
最佳答案
感谢@PeterT 的评论,为各种互斥类型编写了一个可视化工具(位于/Documents/Visual Studio 2017/Visualizers/mutex.natvis):
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="std::_Mutex_base">
<Expand>
<Item Name="[thread_id]">*(long*)((char*)&_Mtx_storage+sizeof(_Mtx_storage)-8)</Item>
<Item Name="[count]">*(int*)((char*)&_Mtx_storage+sizeof(_Mtx_storage)-4)</Item>
</Expand>
</Type>
<Type Name="std::mutex">
<DisplayString>mutex</DisplayString>
<Expand>
<ExpandedItem>(_Mutex_base*)this</ExpandedItem>
</Expand>
</Type>
<Type Name="std::timed_mutex">
<DisplayString>timed_mutex</DisplayString>
<Expand>
<Item Name="[locked]">_My_locked</Item>
</Expand>
</Type>
<Type Name="std::recursive_mutex">
<DisplayString>recursive_mutex</DisplayString>
<Expand>
<ExpandedItem>(_Mutex_base*)this</ExpandedItem>
</Expand>
</Type>
<Type Name="std::recursive_timed_mutex">
<DisplayString>recursive_timed_mutex</DisplayString>
<Expand>
<Item Name="[locked]">_My_locked</Item>
<Item Name="[owner]">_My_owner</Item>
</Expand>
</Type>
</AutoVisualizer>
关于c++ - 如何在 Visual Studio 中查看 std::mutex 的锁定线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55918497/