今天一个同事发现自己的一个项目的Log(日志记录)功能无法正常获取日志,由于公司的项目是基本从母系统中生成的,但是由于升级了最新的母系统,所以之前能使用的log发现变得不能用了。
问题是我的自己的项目(新系统)做的Log功能是没问题的…然后我就被安排了找出这个bug 的原因
一开始还以为是由于代码上出问题了,我就把同事的项目拷贝到自己的电脑,并且配置好了他原来的数据库。
1.Debug
不运行怎么知道问题在哪是吧,同时把执行log的代码标注断点。同时加入Log(“Index start”)方便获取
然后发现…数据获取完全没问题…
数据获取到…插入语句没执行的节奏…但是貌似编译器也没报错…神奇了
2.审查旧系统和新系统相关的log代码
表示一个方法一个方法一行一行的去对比,发现…这尼玛的一模一样啊,问题应该不在于代码的问题…
…
到了现在花了一个多小时了
…
3.IntelliTrace跟踪
对于没什么项目经验的实习生,表示真的很少去看堆栈跟踪的事务列表
因为如果真的发生错误,基本都会在页面上抛异常的,比如
但是这次并没有显示这种页面的错误啊啊啊(不知道是不是vs版本不够高的问题,之前都是用vs2015的),惯性思维的原因也导致我忽视了很多潜在东西。
幸运的是我瞄到了编译器右边的 IntelliTrace…
所以继续跟踪断点,查看IntelliTrace里面的事件,终于发现了关键所在
这下子终于找到原因了…为了确认是否真的是数据库表中的列不允许Null值的问题,所以把表中的Id列暂时允许为空了…
再次执行
终于能把log数据存储到了数据库了,然后再把Id列设置为标识规范,让他自动增长。
然后反馈给同事,然后告诉他,不过还是发现插入不了日志数据,好吧那就重新断点看IntelliTrace的事件跟踪,发现是数据库记录日志的表中缺少了一个字段,增加字段后,恢复正常。
总结:如果一开始去查看IntelliTrace跟踪,就可以更早发现异常所在了…也就不会浪费那么多时间了…