一、背景
在一次更新现场软件后,启动软件出现报错弹框,提示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
版本,重新生成,更新到现场。