今天一个同事发现自己的一个项目的Log(日志记录)功能无法正常获取日志,由于公司的项目是基本从母系统中生成的,但是由于升级了最新的母系统,所以之前能使用的log发现变得不能用了。

问题是我的自己的项目(新系统)做的Log功能是没问题的…然后我就被安排了找出这个bug 的原因

一开始还以为是由于代码上出问题了,我就把同事的项目拷贝到自己的电脑,并且配置好了他原来的数据库。


1.Debug

不运行怎么知道问题在哪是吧,同时把执行log的代码标注断点。同时加入Log(“Index start”)方便获取

Q~JSGRJJ~BICVJVJKI@D3ZK

然后发现…数据获取完全没问题…

SSLG2G7}GFY1W]V5ZBBH3ED

数据获取到…插入语句没执行的节奏…但是貌似编译器也没报错…神奇了

 

2.审查旧系统和新系统相关的log代码

表示一个方法一个方法一行一行的去对比,发现…这尼玛的一模一样啊,问题应该不在于代码的问题…


到了现在花了一个多小时了


3.IntelliTrace跟踪

对于没什么项目经验的实习生,表示真的很少去看堆栈跟踪的事务列表

因为如果真的发生错误,基本都会在页面上抛异常的,比如

Image

但是这次并没有显示这种页面的错误啊啊啊(不知道是不是vs版本不够高的问题,之前都是用vs2015的),惯性思维的原因也导致我忽视了很多潜在东西。

幸运的是我瞄到了编译器右边的 IntelliTrace…

所以继续跟踪断点,查看IntelliTrace里面的事件,终于发现了关键所在

{(87WH8YO]M_N6$~`NNGXPS

 

这下子终于找到原因了…为了确认是否真的是数据库表中的列不允许Null值的问题,所以把表中的Id列暂时允许为空了…

再次执行

4D%G~LGFW`L%Z2`7]UFJ``B

终于能把log数据存储到了数据库了,然后再把Id列设置为标识规范,让他自动增长。

然后反馈给同事,然后告诉他,不过还是发现插入不了日志数据,好吧那就重新断点看IntelliTrace的事件跟踪,发现是数据库记录日志的表中缺少了一个字段,增加字段后,恢复正常。

 

总结:如果一开始去查看IntelliTrace跟踪,就可以更早发现异常所在了…也就不会浪费那么多时间了…