C# 托管堆 遭破坏 问题溯源分析
内容简介:
一:背景
1. 讲故事
年前遇到了好几例托管堆被损坏的案例,有些运气好一些,从被破坏的托管堆内存现场能观测出大概是什么问题,但更多的情况下是无法做出准确判断的,原因就在于生成的dump是第二现场,借用之前文章的一张图,大家可以理解一下。
为了帮助更多受此问题困扰的朋友,这篇来整理一下如何 快狠准 的抓取第一现场。
二:抓取第一现场
1. 思路分析
要想抓到第一现场,只需要让破坏托管堆的那个线程在修改完之后,回到 CLR Pinvoke 层的时候主动触发GC,因为这时候托管堆已经是损坏状态了,程序也就会立即崩溃,破坏线程也就被捉jian在床,画个图如下:
那如何让 CLR:PInvoke 主...
查看原文
暂无评论...