.net - Windbg 中的 WaitForMultipleObjects 是否表明 .NET 应用程序中的事件存在问题?

标签 .net windbg

目前,我正在修复 .NET 应用程序中的应用程序挂起问题。经过一些研究,我发现 Windbg 可以深入了解应用程序挂起时发生的情况。

在用户系统上挂起的应用程序之后,我使用 Windbg 收集了更多信息。

首先,我确定了 GUI/STA 线程(寻找 CorExeMain)

0:011> ~*
   0  Id: 1488.314 Suspend: 1 Teb: 7ffdf000 Unfrozen
      Start: mscoree!_CorExeMain_Exported (79004ddb) 
      Priority: 0  Priority class: 32  Affinity: 3

我注意到以下几点:

0:000> k
ChildEBP RetAddr  
0012eb2c 7c90df2c ntdll!KiFastSystemCallRet
0012eb30 7c809574 ntdll!NtWaitForMultipleObjects+0xc
0012ebcc 7e4195f9 KERNEL32!WaitForMultipleObjectsEx+0x12c
0012ec28 7752ebd6 USER32!RealMsgWaitForMultipleObjectsEx+0x13e
0012ec50 77557237 ole32!CCliModalLoop::BlockFn+0x80
0012ecc4 79f9e14d ole32!CoWaitForMultipleHandles+0xcf
0012ece4 79f9e0b4 mscorwks!NT5WaitRoutine+0x51
0012ed50 79f9e018 mscorwks!MsgWaitHelper+0xa5
0012ed70 79f4c664 mscorwks!Thread::DoAppropriateAptStateWait+0x28
0012edf4 79f4c6f9 mscorwks!Thread::DoAppropriateWaitWorker+0x13c
0012ee44 79f15a68 mscorwks!Thread::DoAppropriateWait+0x40

我对windbg的经验有限,但从我进行的研究来看,我得到的印象是WaitForMultipleObjects表明它可能正在等待一个事件。谁能告诉我这是否是一个可能的原因?

我收到了一些警告,这让我怀疑我是否没有正确设置环境:

0012ee44 79f15a68 mscorwks!Thread::DoAppropriateWait+0x40
*** WARNING: Unable to verify checksum for C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll
0012ef48 792b68af mscorwks!WaitHandleNative::CorWaitOneNative+0x156

还有

0012f2ac 03af4dea USER32!DispatchMessageW+0xf
WARNING: Frame IP not in any known module. Following frames may be wrong.
0012f2c8 7b1d8d2e 0x3af4dea

有人可以建议我认为应用程序等待事件的想法是否有任何理由,或者是否有人对可能的原因或可能值得调查的领域有任何直接的想法?

我还想知道《Son of Strike》是否值得跟进?

最佳答案

您正在查看托管线程的 native 调用堆栈。这种等待是 .NET 内部的一部分。您可能需要深入挖掘以弄清楚发生了什么,但您真正关心的是应用程序的托管状态。

您可以通过将 sos 扩展加载到 Windbg 中来完成此操作。它弥合了 Windbg 和 .NET 的 native 性质之间的差距。

加载此扩展的命令在 .NET 框架版本之间有所不同,但类似于:

.loadby sos clr

...或者可能...

.loadby sos mscorwks

从那里,您可以使用 sos 提供的导出来调试 .NET 应用程序。作为起点,您将需要托管调用堆栈。这应该会指出代码中发生挂起的位置。

!clrstack

MSDN 有一个关于 sos 扩展提供的内容的很好的引用。 http://msdn.microsoft.com/en-us/library/bb190764.aspx

关于.net - Windbg 中的 WaitForMultipleObjects 是否表明 .NET 应用程序中的事件存在问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512407/

相关文章:

.net - 在学习 WPF 时,你觉得最难理解的是什么

.net - AppDomain.Unload 不释放我用反射加载的程序集

c# - Equals 方法的奇怪行为

c# - 大开关的替代品?

c# - XML 到对象反序列化

c# - 为什么 psscor4 命令不会运行

c++ - Windbg:ChildEBP和RetAddr的含义

c++ - 为什么即使在调试版本中,VS 和 Windbg 也会将 "this"指针打印为 "0xcccccccc"?

debugging - 如何查看GDTR的值(value)?

c# - 终结器线程 ID