欢迎光临散文网 会员登陆 & 注册

一次机器人程序崩溃的分析

2023-06-29 11:55 作者:西井QAQ  | 我要投稿

28号早上8点机器人主程序又双叒叕崩了, 多亏上次改了改wer服务, 抓到了崩溃时的完整dump, 话不多说开始分析

先从事件管理器入手看看什么情况

原来是coreclr.dll内部出了故障, 原因是非法访问, 把dump拿到本地打开看看

从MS的服务器加载coreclr.dll的pdb然后进源码看看具体错在哪儿了

嗯, 访问位于0x670070方法表失败

等等?这个鬼地方怎么可能摆方法表??

用dotnet-dump命令工具分析一下dump看看

中大奖了, 这一个ColumnModification类里边有无效的对象引用, 回到VS里边回溯一下堆栈看看

没错, GC在检查这个成员的时候尝试访问其方法表导致的错误

检查一下这附近(±0x10)有什么数据

错误引用在0x1dfecdc2d38+0x10, 但在0x1dfecdc2d38+0x20处发现了方法表指针, 看看它是什么东西

原来它是个字符串, 再看看前边的数据长的也像个字符串, 把前后两个有效对象dump出来看看是什么东西

结论是这个ColumnModification.Entry对象里边的方法表引用落到了前一个字符串最后"pg"的地方, 导致GC在回收对象的标记阶段时无法访问方法表, 从而炸了整个程序

内存排布结论

按道理来说不应该发生才对的

估计得起一个daemon守护一下主进程才行了……

一次机器人程序崩溃的分析的评论 (共 条)

分享到微博请遵守国家法律