分析应用程序的挂起转储

时间:2016-01-28 07:22:56

标签: c++ windbg

我正在使用WinDbg工具分析转储文件。没有得到导致这里线程挂起的原因。我只能看到它等待的东西。

elementdetails.Id

2 个答案:

答案 0 :(得分:1)

你可能遇到了僵局,如果是这样,你应该能够确认如下

01 002cd7d8 75f0179c 00002cc0 00000000 00000000 ntdll!NtWaitForSingleObject + 0xc

0x00002cc0是传递给NtWaitForSingleObject的arg,!locks -v命令会显示锁定的对象,你正在寻找一个像这样开始的

CritSec [lockOffset] at 00002cc0

[lockOffset]可以是数字,也可以是符号地址,如ntdll!RtlCiritcalSectionLock + 0。

在该行下会有几个值,你需要找到“拥有线程”,这是阻止你在原始问题中显示的那个的线程

然后你需要跟随线程,所以看看它在做什么。在经典的死锁中,它将等待您显示的线程拥有的同步对象。但死锁循环可能是几个线程深。你需要关注这些主题。

答案 1 :(得分:0)

您希望使用!locks命令列出所有线程所持有的锁。