.net - ApplicationHang - PeekMessage
问题描述
我正在调查应用程序挂起(winforms)。它只发生在客户机器上。他们从冻结过程中为我们提供了 dmp。但我不确定如何解释数据。
我将文件加载到 WinDbg 中。
!dlk => 没有死锁
!分析-挂起
FAULTING_THREAD: 00003aec (这是主线程) WATSON_BKT_EVENT: AppHang ERROR_CODE: (NTSTATUS) 0xcfffffff - EXCEPTION_CODE_STR: cfffffff DERIVED_WAIT_CHAIN:
Dl Eid Cid WaitType
0 3ae8.3aec COM
=> 对我来说看起来像是主线程上的 COM 问题!转储堆栈
user32!_PeekMessage+0x42, 调用 win32u!NtUserPeekMessage combase!CCliModalLoop::MyPeekMessage+0x52, 调用 user32!PeekMessageW user32!PeekMessageW+0x149, 调用 user32!_PeekMessage user32!PeekMessageW+0x149, 调用 user32!_PeekMessage combase!CCliModalLoop::MyPeekMessage+ 0x52, 调用 user32!PeekMessageW combase!CCliModalLoop::MyPeekMessage+0x52, 调用 user32!PeekMessageW combase!CCliModalLoop::HandleWakeForMsg+0x13b, 调用 combase!CCliModalLoop::SetPointerInputModeAsAppropriateForQueueAttachmentConditions combase!CCliModalLoop::PeekRPCAndDDEMessage+comdalLoop::PeekRPCAndDDEMessage+0x49! MyPeekMessage combase!CCliModalLoop::RevertToNormalPointerInputMode+0x1d,调用 combase!CCliModalLoop::IsAttachedQueuePointerMessageReorderingAllowed combase!CCliModalLoop::BlockFn+0x262,调用 combase!CCliModalLoop::PeekRPCAndDDEMessage combase!ClassicSTAThreadWaitForHandles+0x9f, calling combase!CCliModalLoop::BlockFn clr!PrepareCriticalFinalizerObject+0x5e, calling clr!_security_check_cookie combase!CoWaitForMultipleHandles+0x76, calling combase!_guard_dispatch_icall_nop clr!MsgWaitHelper+0x8e, calling combase!CoWaitForMultipleHandles clr!ThreadStateNCStackHolder::~ThreadStateNCStackHolder+0x1c , 调用 clr!GetThread clr!Thread::DoAppropriateWaitWorker+0x2e6, 调用 clr!MsgWaitHelper clr!Thread::DoAppropriateWait+0x7d, 调用 clr!Thread::DoAppropriateWaitWorker clr!WaitHandleNative::CorWaitOneNative+0x161, 调用 clr!Thread::DoAppropriateWa KERNELBASE!CreateEventW+0x8c,调用 ntdll!RtlSetLastWin32Error :CoWaitForMultipleHandles+0x76, 调用 combase!_guard_dispatch_icall_nop clr!MsgWaitHelper+0x8e, 调用 combase!CoWaitForMultipleHandles clr!ThreadStateNCStackHolder::~ThreadStateNCStackHolder+0x1c, 调用 clr!GetThread clr!Thread::DoAppropriateWaitrWorker!::::WaitHel DoAppropriateWait+0x7d, 调用 clr!Thread::DoAppropriateWaitWorker clr!WaitHandleNative::CorWaitOneNative+0x161, 调用 clr!Thread::DoAppropriateWait KERNELBASE!CreateEventW+0x8c, 调用 ntdll!RtlSetLastWin32Error :CoWaitForMultipleHandles+0x76, 调用 combase!_guard_dispatch_icall_nop clr!MsgWaitHelper+0x8e, 调用 combase!CoWaitForMultipleHandles clr!ThreadStateNCStackHolder::~ThreadStateNCStackHolder+0x1c, 调用 clr!GetThread clr!Thread::DoAppropriateWaitrWorker!::::WaitHel DoAppropriateWait+0x7d, 调用 clr!Thread::DoAppropriateWaitWorker clr!WaitHandleNative::CorWaitOneNative+0x161, 调用 clr!Thread::DoAppropriateWait KERNELBASE!CreateEventW+0x8c, 调用 ntdll!RtlSetLastWin32Error :DoAppropriateWaitWorker clr!WaitHandleNative::CorWaitOneNative+0x161, 调用 clr!Thread::DoAppropriateWait KERNELBASE!CreateEventW+0x8c, 调用 ntdll!RtlSetLastWin32Error :DoAppropriateWaitWorker clr!WaitHandleNative::CorWaitOneNative+0x161, 调用 clr!Thread::DoAppropriateWait KERNELBASE!CreateEventW+0x8c, 调用 ntdll!RtlSetLastWin32Error :
我不确定如何进一步调查/解释这一点。从堆栈中,我猜想发生一些 COM 事情的线程没有响应。对“PeekMessage”的调用可能表明消息队列损坏/无响应。带有“SetPointerInputModeAs...”的行对我来说似乎也很可疑。
任何建议或想法任何人?
亲切的问候
解决方案
推荐阅读
- java - 投射到客户时出现条纹 Java API Webhook 错误
- flask-appbuilder - Flask appbuilder 大型应用程序
- java - 调用 Driver#connect 时出错,并且无法创建与数据库服务器的连接
- javascript - 如何使用 lodash 根据值对嵌套数组进行排序?
- fonts - 无法从 Windows 10 中删除 Google 字体
- c# - 试图理解函数之间的 C#、WPF 和用户输入
- javascript - 选择字段中的默认值
- coq - 证明在列表中找到相同元素的另一个属性
- nginx - K8S - Ingress - Route 2 不同的应用程序
- android - 错误:找不到属性 android:onProgressChanged。错误:链接文件资源失败