记一次 .NET某炉膛锅炉检测系统 崩溃分析

原文约7700字,阅读约需19分钟。发表于:

一:背景 1. 讲故事上个月有个朋友在微信上找到我,说他们的软件在客户那边隔几天就要崩溃一次,一直都没有找到原因,让我帮忙看下怎么回事,确实工控类的软件环境复杂难搞,朋友手上有一个崩溃的dump,刚好丢给我来分析一下。二:WinDbg分析 1. 程序为什么会崩溃windbg 有一个厉害之处在于双击之后可以帮你自动定位到崩溃处,输出如下:..................................

本文讲述了作者朋友的软件经常崩溃的问题,通过WinDbg分析发现是托管堆损坏导致的。作者进一步分析发现崩溃发生在bgc线程上,而bgc线程正在做后台对象标记。作者观察到托管堆中有一个对象处于有损状态,但托管堆本身应该是没有问题的。作者进一步观察bgc线程的汇编代码发现了bug,最终作者关闭了bgc模式来解决问题。

相关推荐 去reddit讨论