我得到了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:還有另一個關於懸掛的故事。如果我使用遠程調試器調試應用程序,則不會遇到掛起。但是,如果我在服務器機器上啓動應用程序。它 非常感謝
在哪裏你的程序是FreeLibrary調用的?你是明確地調用它還是通過一個「正常」事件來調用它? – 2011-04-29 07:47:14
FreeLibrary被調用explicity來卸載插件模塊,當它不再需要時 – suds 2011-04-29 07:55:52
可以顯示你在哪裏調用它? – 2011-04-29 08:03:46