记一次 .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层面知识有一定了解才能分析崩溃原因。
➡️