sgx9988 发表于 2013-4-22 16:56:23

如何使用windb查看锁状态
0:021> !locks
NTSDEXTS: Unable to resolve ntdll!RtlCriticalSectionList
NTSDEXTS: Please check your symbols
目前windb出现以上错误,不知道有没有人知道是什么原因啊

sgx9988 发表于 2013-4-22 17:28:31

sgx9988 发表于 2013-4-22 16:56 static/image/common/back.gif
如何使用windb查看锁状态
0:021> !locks
NTSDEXTS: Unable to resolve ntdll!RtlCriticalSectionList


这个需要配置调试符号:
方法如下:

运行WinDbg->菜单->File->Symbol File Path->按照下面的方法设置_NT_SYMBOL_PATH变量:
在弹出的框中输入“C:\MyCodesSymbols; SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols”(按照这样设置,WinDbg将先从本地文件夹C:\MyCodesSymbols中查找Symbol,如果找不到,则自动从MS的Symbol Server上下载Symbols)。另一种做法是从这个Symbol下载地址中http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx,下载相应操作系统所需要的完整的Symbol安装包,并进行安装,例如我将其安装在D:\WINDOWS\Symbols,在该框中输入“D:\WINDOWS\Symbols”。(这里要注意下载的Symbols的版本一定要正确,在我的Win2003+Sp1上,我曾经以为安装Win2003+Sp2的Symbols可能会牛×点,但结果证明我错了,用WinDbg打开可执行文件时,提示“PDB symbol for mscorwks.dll not loaded;Defaulted to export symbols for ntdll.dll”的错误,我有重新装上Win2003+Sp1的Symbols, 现在一切运行正常^_^)

winston 发表于 2013-4-25 14:20:48

WaitForSingleObject -> 八九不离十,死锁了。查代码环吧!

winston 发表于 2013-4-25 14:21:37

具体处理呢,就是在代码中寻找“环”,寻找环路的处理依赖。比如A通过B调用了C,而C在不同的线程,又调用了A,A、B、C中的代码,都有同步处理过程,这个就容易发生死锁,想办法打破这种循环依赖关系,不仅仅对减少代码耦合重要,更对服务器的死锁预防重要。
http://www.acejoy.com/forum.php?mod=viewthread&tid=722

sgx9988 发表于 2013-4-28 08:57:48

winston 发表于 2013-4-25 14:21 static/image/common/back.gif
具体处理呢,就是在代码中寻找“环”,寻找环路的处理依赖。比如A通过B调用了C,而C在不同的线程,又调用了 ...

已经解决了,是由于一个任务的消息队列满了,导致消息转发任务阻塞,最终导致所有任务阻塞。

yoogera 发表于 2013-7-24 15:19:33

线程不多应该直接可以看那些正在等待的线程,看是否相互发生了死等,还有在ACE的Mutex中在调试版本下他记录了当前拥有它的线程ID,这样也可以快速看看是否发生死锁。
页: 1 [2]
查看完整版本: ACE任务定时器丢失问题求助