对一次bug排查过程的反思
前两天遇见一个bug,在已买到的宝贝列表页面,如下图:

直觉反应是表头的CSS有问题,仔细检查后,却没发现问题。难道是JS引起的?禁用JS后,问题依旧。
开始怀疑是页面中某段HTML代码导致了这个bug. 前几天刚用熟了Fiddler,于是毫不犹豫地立马派上战场:

其中E:IdeaProjectsTaobaoTest.html是保存的页面源码,也可以用bpu或Unlock for Editing等方式直接在Fiddler的SyntaxView中修改。但对于频繁修改来说,用AutoResponder映射到本地,再用自己喜欢的编辑器修改会更方便。
凭着经验,逐步移除Test.html中的代码块,直到只剩下表格本身,结果发现问题依旧。此时已经耗费了10多分钟,看着ie7下狰狞的空白,着实有点沮丧。
于是习惯性地打开google,琢磨了几个关键词,结果却没有搜到任何相关话题。
仔细回想这个页面的开发过程,demo在ie下是没问题的。后台套vm模板时,我也曾仔细检查过。难道最近又有啥修改让HTML代码出问题了?立刻打开Firefox的HTML Validator插件:

一堆警告触目惊心,开发居然在两个tr之间放了两个input元素。立刻将input移动到td里面,刷新页面,bug消失了!
马上通知开发修改vm模板,至此已经耗费了近一个小时,庆幸的是一切搞定!
总的来说,这次bug排查效率还比较高。但现在回过头来想想,发现自己还是犯了不少“错误”:
- 当直觉解决不了问题,对bug毫无头绪时,应该首先用HTML Validator检查,不少诡异bug都源自代码的不规范。比如上面的bug,如果排查时遵守这一条,应该10分钟内就能搞定。
- 对于这个bug,其实根本用不着Fiddler. 完全可以保存页面到本地,直接调试本地文件即可,Fiddler仅满足了技术欲望。对于复杂环境下的JS bug,才是Fiddler的真正用武之地。目前我自己以及不少同事都有点滥用Fiddler(感觉上很酷),以后还是要选择性使用,Fiddler未必是最高效的。
对于bug排查,小马曾有过一个很好的总结:1. 善用工具,2. 善用搜索。无他,唯手熟尔!
我补充一点:3. 勤于总结。让知识和经验分享沉淀下来,为了自己的成长,也是为了前端整个行业的成熟。

February 28th, 2009 on 17:54
总结的不错
February 28th, 2009 on 18:19
这种界面问题一般是X/HTML标签或者CSS问题,用Fiddler好奇怪。。。大概是爬树看起来很酷,所以总有人缘木求鱼。哈哈,玩笑。
反省的很好,支持。
February 28th, 2009 on 20:03
vm include其他vm的时候如果编码不一样,也会有诡异的空行 - -
而且firebug inspect那一行,居然在debug窗口有诡异空行,too
囧
February 28th, 2009 on 22:52
我的条件反射是firebug先看看HTML代码
February 28th, 2009 on 23:07
如果发生这种事情我的第一反应也是firebug看HTML。。。
March 1st, 2009 on 0:17
写代码的编辑器很重要,不正确的HTML嵌套直接就报错了,比如我经常用的expression web
March 1st, 2009 on 2:12
曾经是直接用innerHTML向DOM树上插入DOM,“页面标签引起的innerHTML未知错误 ” 地址:http://hi.baidu.com/meteoric_cry/blog/item/e030172e17d04a574ec226b6.html
后来才现少了一个结尾标签,是在DW下检查出来的 不过我用aptana也是很直观的就能给你指出行数,少一个结尾标签倒没关系,但如果在这个标签上绑了事件–那就直接内存泄露了,多刷新几次就很明显的看得出来
那如果页面中少了有什么反应吗?用IE运行程序的时候出现 “internet explorer 无法打开 Internet站点 已中止操作”"
(有时好像看不到) 怪怪的
March 1st, 2009 on 10:18
@楼上各位:我的第一反应也是firebug检查html和css. 这个bug的问题在于,症状出现在thead里,检查thead的html没任何问题,因为是tbody里的tr之间的hidden input引起的
对于tbody里不在tr内的元素,我用IDEA编辑没有报错提示,不知道DW会不会提示,最后还是靠HTML Validator插件检查出来了
对于标签未闭合等问题,这个打开编辑器就知道了。怕就怕,很细小的被编辑器忽略的标签问题
March 1st, 2009 on 10:45
挺用心
March 1st, 2009 on 22:33
HTML Validator的确在成品快出来的时候很有帮助~代码写多了就容易错点小差错
March 2nd, 2009 on 17:27
这种类似的问题 见过,直接用firebug就能看出来了 ,用不了2分钟啊
March 3rd, 2009 on 9:51
排错就是这样,有时候反复查找,最后发现是一个很不起眼的地方,工作中经常会遇到这种情况,有时候是自己把问题复杂化了,吃一堑长一智,以后遇到相关问题就好解决了,这就是经验了
March 3rd, 2009 on 23:43
其实直接使用IEToolBar就能看出来。
March 9th, 2009 on 10:22
最可贵的是这后期的反思过程
March 25th, 2009 on 12:40
对于诡异一点的bug,可以一个小时搞定挺有效率的了
leave a reply