记一次 .NET某施工建模软件 卡死分析
原文中文,约7400字,阅读约需18分钟。
📝
内容提要
本文讲述了作者朋友的软件卡死问题,通过WinDbg分析发现是AcLayers.dll的lock操作导致的。问题是由PerformanceCounter类引发的,去掉该类后问题解决。
❓
Q&A
软件卡死的原因是什么?
软件卡死是由于AcLayers.dll的lock操作导致的,具体是由PerformanceCounter类引发的问题。
如何使用WinDbg分析软件卡死问题?
可以使用WinDbg的k命令观察主线程,分析线程栈来查找卡死的原因。
AcLayers.dll的作用是什么?
AcLayers.dll用于处理系统级兼容性问题,特别是在查询注册表时会涉及到lock操作。
PerformanceCounter类引发卡死的机制是什么?
PerformanceCounter类在执行CloseLagPerfData方法时导致线程进入Sleep状态,从而持有锁不释放,造成卡死。
如何解决软件卡死的问题?
去掉PerformanceCounter类的使用后,软件卡死的问题得以解决。
在分析过程中如何观察持有锁的线程?
可以使用!cs命令查看临界区锁的持有信息,或者通过线程栈分析来获取持锁线程的信息。
🏷️