【发布时间】:2020-03-31 09:55:15
【问题描述】:
我有一个由 c++ 编写的程序,但我无法找到哪个线程获得了Slim Reader/Writer (SRW) Locks。我用谷歌搜索并找到了Determining which method is holding a ReaderWriterLockSlim WriteLock,但它是关于一个由 C# 编写的程序。此外,某些命令(例如.rwlock)不可用。
0:796> !handle 0 ff Mutant
Handle c
Type Mutant
Attributes 0
GrantedAccess 0x1f0001:
Delete,ReadControl,WriteDac,WriteOwner,Synch
QueryState
HandleCount 4
PointerCount 103240
Name \BaseNamedObjects\DBWinMutex
Object Specific Information
Mutex is Free
Handle 474
Type Mutant
Attributes 0
GrantedAccess 0x1f0001:
Delete,ReadControl,WriteDac,WriteOwner,Synch
QueryState
HandleCount 2
PointerCount 65536
Name \BaseNamedObjects\SM0:928:304:WilStaging_02
Object Specific Information
Mutex is Free
2 handles of type Mutant
0:796> kb
RetAddr : Args to Child : Call Site
00007ff9`b6e3d33a : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!ZwWaitForAlertByThreadId+0x14
00007ff9`a85726a9 : 00000000`00000000 00000000`00000000 00000192`83338180 00000000`00000000 : ntdll!RtlAcquireSRWLockExclusive+0x13a
00007ff9`a6231724 : c000000d`00000000 00000000`00000000 00000192`83338180 00000000`00000002 : MSVCP140!mtx_do_lock+0x7d [d:\agent\_work\2\s\src\vctools\crt\crtw32\stdcpp\thr\mutex.cpp @ 106]
00007ff9`a626749e : 00000192`f6a26e38 00000193`4aaa3d80 00000052`897fea60 00000000`00000000 : AZSDK!AZConnection::Post+0x54 [g:\prod\sdk\src\connection.cpp @ 1147]
...
00007ff9`9c8ba9c1 : 00000192`c3b3d770 00000000`00000000 00000192`f5d616b0 00000000`00000000 : prod!Task::Execute+0x28 [g:\prod\src\task.cpp @ 51]
00007ff9`b6e97529 : 00000193`491b9830 00000000`7ffe0386 00000052`897ff998 00000193`491b98f8 : prod!Proxy::TaskExecuter+0x11 [g:\prod\src\proxy.cpp @ 2042]
00007ff9`b6e3bec4 : 00000000`00000000 00000192`f1dd03a0 00000000`00000000 00000000`00000000 : ntdll!TppSimplepExecuteCallback+0x99
00007ff9`b6c47e94 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!TppWorkerThread+0x644
00007ff9`b6e87ad1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14
00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21
0:796> !rwlock
No export rwlock found
C++代码sn-p:
std::mutex m_mutex;
Status AZConnection::Post(const Request* request, Result** pResult)
{
std::lock_guard<std::mutex> sbguard(m_mutex);
}
更新:
根据rustyx's answer,我明白了。现在我不得不放弃了。
事实上,我的程序仍在运行,但已停止服务。我必须找到原因。我发现有 806 个线程,其中大多数都在焦急地等待Post。此外,如果它没有重现,我无法重新启动添加已获得锁定的日志打印。因此,我只想检查持有锁的线程在做什么。
【问题讨论】:
标签: c++ windows multithreading locking windbg