查找死锁的方法

死锁主要是由于操作不当导致线程之间出现相互等待,一般有source code的和pdb就可以找到死锁的原因,只要在code中不出现terminatethread,一般均可找到原因。

若使用了第三方库,别人的code就不在我们的管控范围以内,很难定位到具体原因。 一般可以看到ntdll的临界区被占用,rtlEnterCriticalSection等待。此时又不知道被哪个线程占用,这种情况vs不能查找到原因,我们可以使用vs将当前程序dump出来,再使用windbg打开dump文件找到死锁的线程,再找到ntdll的临界区,解析信息。


使用!cs 77777490查看具体占用临界区的具体线程


猜你喜欢

转载自blog.csdn.net/cys861214/article/details/78468704