记一次 .NET某医疗器械清洗系统 卡死分析
💡
原文中文,约5100字,阅读约需12分钟。
📝
内容提要
文章讲述了通过WinDbg分析程序卡死问题,最终定位到问题代码是IntPtr handle = this.Handle,解决办法是用bp拦截System.Windows.Forms.Application+MarshalingControl..ctor方法。
🎯
关键要点
- 文章讲述了通过WinDbg分析程序卡死问题的背景。
- 使用WinDbg分析程序卡死时,首先查看主线程的状态。
- 卡死问题源于win32u!NtUserPeekMessage方法的调用。
- 通过观察内核态,确认线程在等待消息。
- 使用!process命令查看进程和线程信息。
- 分析线程栈,发现win32kfull!xxxSendMessage方法的调用。
- 提取发送消息的窗体句柄,确认是由另一个线程创建的用户控件。
- 非主线程创建用户控件导致的卡死问题是常见错误。
- 解决办法是用bp拦截System.Windows.Forms.Application+MarshalingControl..ctor方法。
- 最终定位到问题代码是IntPtr handle = this.Handle,解决了卡死问题。
➡️