软件更新后出现反序列化异常问题排查

作者:Chdon 发布时间: 2025-08-11 阅读量:15 评论数:0

一、背景

在一次更新现场软件后,启动软件出现报错弹框,提示JSON反序列化失败。

排查代码更改,未变更类型中对象。替换更新之前文件,软件能够正常运行。

在报错弹窗时,抓取DUMP文件。

二、报错分析

1. 使用!t 查看线程报错信息。

2. 使用!pe 打印报错信息。

发现在SetValue时报错。

3. 继续使用!pe 打印InnerException报错信息。

发现缺失引用dll,log4net version=2.0.17.0

4. 使用lm 查看当前加载模块。

未发现被加载的log4net.dll

5. 在程序根目录发现log4net.dll版本为2.0.15

三、为什么反序列化SetValue中会调用到Log4Net

!pe 打印InnerException 时,可以在堆栈中,发现set_CurrentIndex 调用了LogHelper.Post

1. 使用!name2ee查看UnLoader对象对应的模块。

2. 使用!savemodule保存模块文件。

3. 反编译查看对应代码。

发现在get 方法中调用了LogHelper.Post

四、解决方法

统一log4net 版本,重新生成,更新到现场。

评论