使用WinDBG分析死锁问题

  1. 查看临界区对象信息
    OwningThread表示占有该临界区对象的线程
    线程7e0c占有00007ff6 2a6cccb8,线程4e6c占有00007ff6 2a6ccd60。
0:000> !locks

CritSec XXX!g_aaa_tm+0 at 00007ff62a6cccb8
WaiterWoken        No
LockCount          12
RecursionCount     1
OwningThread       7e0c
EntryCount         0
ContentionCount    91f0
*** Locked

CritSec XXX!g_bbb_tm+0 at 00007ff62a6ccd60
WaiterWoken        No
LockCount          5
RecursionCount     1
OwningThread       4e6c
EntryCount         0
ContentionCount    1c
*** Locked

Scanned 80 critical sections
  1. 查看占有临界区对象的线程调用堆栈
    线程7e0c占有00007ff6 2a6cccb8,同时正在等待00007ff6 2a6ccd60;
    线程4e6c占有00007ff6 2a6ccd60,同时正在等待00007ff6 2a6cccb8。
0:000> ~~[7e0c]
   8  Id: 4830.7e0c Suspend: 0 Teb: 00007ff6`29368000 Unfrozen
      Start: XXX!thread_run (00007ff6`2a42a7f0) 
      Priority: 0  Priority class: 32  Affinity: 3f
0:000> ~~[4e6c]
  92  Id: 4830.4e6c Suspend: 0 Teb: 00007ff6`292ac000 Unfrozen
      Start: XXX!thread_run (00007ff6`2a42a7f0) 
      Priority: 0  Priority class: 32  Affinity: 3f
0:000> ~8kv
Child-SP          RetAddr           : Args to Child                                                           : Call Site
00000000`0adce5b8 00007fff`59a52e2d : 00000000`00e22f50 00000000`62f94642 00000000`081edfb8 00000000`0adce7b0 : ntdll!ZwWaitForSingleObject+0xa
00000000`0adce5c0 00007fff`59a52803 : 00000000`0adcef80 00000000`000000d7 00007ff6`2a6ccd60 00000000`00000000 : ntdll!RtlpWaitOnCriticalSection+0xe1
00000000`0adce690 00007ff6`2a3e0f7a : 00000000`00000000 00000000`00e22f50 00000000`07926252 00000000`0adce810 : ntdll!RtlpEnterCriticalSectionContended+0x93
00000000`0adce6d0 00007ff6`2a3e17ba : 00000000`00e25860 00000000`00e25860 00000000`00e22f50 00000000`5d275d00 : XXX!o+0x2a [d:\a\b\c\d\e\g\i.cpp @ 29]
00000000`0adce760 00007ff6`29fc997c : 00000000`00e66380 00000000`00e66380 00000000`07926242 00000000`0000001f : XXX!p+0x6ea [d:\a\b\c\d\e\g\i.cpp @ 99]
00000000`0adcf3c0 00007ff6`29fb9ee2 : 00007ff6`29fc92d0 00000000`0adcfcf0 00000000`00e29740 00007ff6`29ef4c4a : XXX!A::q+0x6ac [d:\a\b\c\d\e\h\j\l.cpp @ 3908]
00000000`0adcfbd0 00007ff6`29fb7247 : 00000000`0000000a 00000000`0000006c 00000000`079261c0 00000000`00000000 : XXX!A::r+0x572 [d:\a\b\c\d\e\h\j\l.cpp @ 660]
00000000`0adcfc90 00007ff6`29fb7049 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : XXX!s+0x197 [d:\a\b\c\d\e\h\k.cpp @ 362]
00000000`0adcfd50 00007ff6`2a42a825 : 00000000`00000000 00000000`0000006c 00000000`079261c0 00000000`079120b0 : XXX!B::run+0xf9 [d:\a\b\c\d\e\h\m.cpp @ 317]
00000000`0adcfda0 00007fff`59201611 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : XXX!thread_run+0x35 [d:\a\b\c\d\f\n.cpp @ 178]
00000000`0adcfdd0 00007fff`59a964ad : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd
00000000`0adcfe00 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d
0:000> ~92kv
Child-SP          RetAddr           : Args to Child                                                           : Call Site
00000000`2bd4ed38 00007fff`59a52e2d : 00000000`07b1f4c0 00000000`00000000 00007ff6`2a6ccce0 00000000`00000000 : ntdll!ZwWaitForSingleObject+0xa
00000000`2bd4ed40 00007fff`59a52803 : 00000000`082a1690 00000000`5ef13fa0 00007ff6`2a6cccb8 00000000`5ef13fa0 : ntdll!RtlpWaitOnCriticalSection+0xe1
00000000`2bd4ee10 00007ff6`2a3ca431 : 00000000`5ef13fa0 00000000`079c0880 00000000`0000007f 00000000`082a1690 : ntdll!RtlpEnterCriticalSectionContended+0x93
00000000`2bd4ee50 00007ff6`2a3cac43 : 00000000`5ee4f1b0 00000000`00000000 00000000`00000000 00000000`07cc0fc0 : XXX!n+0x801 [d:\a\b\c\d\e\g\j.cpp @ 144]
00000000`2bd4f770 00007ff6`29e54b36 : 00000000`00000001 00000000`631fcce9 01d538c5`ffff8f80 00000000`2bd4f860 : XXX!o+0x13 [d:\a\b\c\d\e\g\j.cpp @ 181]
00000000`2bd4f7a0 00007ff6`2a2ec6fb : 0000016b`e50d722e 00000000`00000000 00007ff6`2a4e1cb0 00000000`00004e6c : XXX!p::run+0x36 [d:\a\b\c\d\e\h\k.cpp @ 654]
00000000`2bd4f8a0 00007ff6`2a42a825 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : XXX!q::run+0xab [d:\a\b\c\d\e\i\l.h @ 97]
00000000`2bd4f8e0 00007fff`59201611 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : XXX!r+0x35 [d:\a\b\c\d\f\m.cpp @ 178]
00000000`2bd4f910 00007fff`59a964ad : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd
00000000`2bd4f940 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值