记一次 .NET某工控自动化系统 崩溃分析

💡 原文中文,约7400字,阅读约需18分钟。
📝

内容提要

本文介绍了作者如何使用WinDbg分析程序崩溃问题,发现是由于坏内存导致的。作者还发现了僵死的线程,并确定崩溃发生在C++方法中。最后,作者总结了dump分析的难度,并鼓励关注崩溃发生的方法。

🎯

关键要点

  • 作者通过WinDbg分析程序崩溃问题,发现是由于坏内存导致的。
  • 崩溃发生在C++方法中,涉及GC标记阶段的逻辑。
  • 使用命令!analyze -v找到崩溃的异常记录,显示访问违规。
  • 通过反汇编分析,发现坏对象的地址是由于GC触发后对象移动导致的。
  • 未使用GCHandle固定对象,导致C++层面和CLR层面崩溃。
  • 找到僵死线程,确认其在C++方法中,进一步分析其调用栈。
  • 总结dump分析的难度,强调对GC标记阶段的理解重要性。
➡️

继续阅读