windbg调试死锁

时间:2024-04-14 09:52:18

一、测试程序编写

windbg调试死锁

windbg调试死锁

二、windbg加载目标分析进程

三、windbg环境设置(否则出现:Unable to resolve ntdll!RtlCriticalSectionList

1.加载sos.dll,命令行执行: .load  C:\Windows\Microsoft.NET\Framework\v4.0.30319\SOS.dll

2.加载符号文件目录,在symbol search path中添加:

SRV*C:\Windows Sysmbols* http://msdl.microsoft.com/download/symbols

3.!locks未生效的话,重新加载:.reload

四、!lock,~*kv分析

1.查看锁

windbg调试死锁

结果显示意思:线程6540在等待0x00f3a780锁,线程23c8在等待0x00f3a798锁

2.查找到线程6540和23c8对应的线程ID

windbg调试死锁

结果显示:6540对应006,23c8对应007

3.分析006和007的堆栈

windbg调试死锁

结果分析:第三列是入参,线程6已经占用00f3a798锁,线程7已经占据00f3a780锁

所以结果判断:两个线程在两把锁的交替使用上发生了死锁。