记一次 .NET某新能源检测系统 崩溃分析

💡 原文中文,约7900字,阅读约需19分钟。
📝

内容提要

介绍使用WinDbg分析程序崩溃的过程,发现是在析构C#的SafeWaitHandle对象时抛出异常,需要通过perfview对handle进行全程监控找到释放这个handle的代码。

🎯

关键要点

  • 朋友的程序偶发性崩溃,寻求帮助分析原因。
  • 使用WinDbg分析崩溃点,发现异常状态80000004。
  • 异常发生在C#的SafeWaitHandle对象析构时。
  • 通过线程栈信息确认异常发生在ntdll!NtClose函数。
  • C#层未捕获异常,使用!t命令查看线程状态。
  • 异常信息显示为外部组件发生异常,未提供有效线索。
  • 进一步分析非托管层,提取handle值,发现handle已被释放。
  • 异常代码0xc0000008表示释放已释放的句柄,推测C++提前释放了handle。
  • 建议使用perfview对handle进行全程监控以找到释放代码。
  • 总结需要对Windows层面知识有一定了解才能分析崩溃原因。
➡️

继续阅读