2011-04-29 118 views
1

我得到了drwtsn32在网站上生成的crashdump,它显示应用程序在调用系统API FreeLibrary时被阻止。 这里的等级堆栈:应用程序挂起而freelibrary

ChildEBP RetAddr Args to Child 
06f0fc14 7c827d29 7c83d266 00000718 00000000 ntdll!KiFastSystemCallRet (FPO: [0,0,0]) 
06f0fc18 7c83d266 00000718 00000000 00000000 ntdll!ZwWaitForSingleObject+0xc (FPO: [3,0,0]) 
06f0fc54 7c83d2b1 00000718 00000004 00000000 ntdll!RtlpWaitOnCriticalSection+0x1a3 (FPO: [2,7,4]) 
06f0fc74 7c839874 7c8897a0 00000000 00000000 ntdll!RtlEnterCriticalSection+0xa8 (FPO: [1,1,0]) 
06f0fd7c 77e6b1bb 014e0000 00000000 02a67430 ntdll!LdrUnloadDll+0x35 (FPO: [SEH]) 
06f0fd90 005e8cdd 014e0000 02a4bc88 06f0fdbc kernel32!FreeLibrary+0x41 (FPO: [1,0,0]) 
.... 

我注意到行NTDLL RtlEnterCriticalSection + 0xa8(FPO:[1,1,0])!,我想这应该是相对CRITICAL_SECTION。所以,我在WinDbg中使用DT命令来显示它的CRITICAL_SECTION信息

0:037> dt 7c8897a0 RTL_CRITICAL_SECTION 
SiteAdminSvc!RTL_CRITICAL_SECTION 
    +0x000 DebugInfo  : 0x7c8897c0 _RTL_CRITICAL_SECTION_DEBUG 
    +0x004 LockCount  : -18 
    +0x008 RecursionCount : 1 
    +0x00c OwningThread  : 0x00002098 
    +0x010 LockSemaphore : 0x00000718 
    +0x014 SpinCount  : 0 

行+量0x00C OwningThread:0x00002098表明CRITICAL_SECTION是由线程0x2098举行,但它是如此奇怪的是,我甚至不能找到这样的线程列表中的线程。

是否有任何其他方法来找出为什么FreeLibrary被阻止? PS:还有另一个关于悬挂的故事。如果我使用远程调试器调试应用程序,则不会遇到挂起。但是,如果我在服务器机器上启动应用程序。它 非常感谢

+0

在哪里你的程序是FreeLibrary调用的?你是明确地调用它还是通过一个“正常”事件来调用它? – 2011-04-29 07:47:14

+0

FreeLibrary被调用explicity来卸载插件模块,当它不再需要时 – suds 2011-04-29 07:55:52

+0

可以显示你在哪里调用它? – 2011-04-29 08:03:46

回答