今儿个遇到一个特烦人的问题,搞得我头都大。我这不一直折腾一个网页项目嘛结果今天突然弹出一个错误提示,说什么“stack overflow at line”。我当时就懵,这啥玩意儿?
排查问题的过程
遇到问题,咱也不能慌。我先是仔细检查代码,看看是不是哪里写死循环,或者递归调用没写把栈给撑爆。毕竟网上都这么说,这问题十有八九是跟递归和循环有关。
可是我翻来覆去看好几遍,也没发现哪里有明显的死循环或者无限递归。这就奇怪,难道是撞鬼?
然后我又想到,会不会是内存的问题?是不是我一下子加载太多东西,把内存给占满?于是我赶紧打开任务管理器,想看看内存占用情况。
- 结果一看,内存占用也不算太高,还有不少空闲。这下更让我摸不着头脑。
没办法,我只好去网上搜搜看有没有遇到类似问题的朋友。结果还真不少,各种说法都有。有人说要禁用脚本调试,有人说要运行什么命令,还有人说要改注册表...看得我眼花缭乱。
我试着照着网上说的,先是在IE浏览器的“Internet选项”里,把“高级”选项卡下的“禁用脚本调试”给勾上。然后又在“运行”里输入REGSVR32 *
,回车后重启系统。可是问题依旧,还是会弹出那个讨厌的错误提示。
折腾半天,我突然想起来,之前好像看到有人提到过,双击表格行的时候出现过类似的问题。我这项目里正好也有一个双击事件!
- 我赶紧找到那段代码,仔细一看,原来是在一个
TR
的onDblClick
事件里,我写一个。
会不会是这个的问题?我试着把这行代码注释掉,然后再双击表格行,果然不报错!
找到问题根源
看来问题就出在这个上。可是为什么会这样?我还是有点想不通。
我又去网上查查,终于找到一篇文章,说是onerror
代码的问题。我这才想起来,我这页面里好像也有onerror
事件!
- 我赶紧找到
onerror
事件的代码,发现里面引用一张图片。会不会是这张图片的问题?
我试着把onerror
代码去掉,或者换成一张很小的图片,然后再双击表格行,果然就没问题!
总结经验教训
这回的“stack overflow at line”问题,总算是解决。虽然过程有点曲折,但也让我学到不少东西。
以后再遇到类似的问题,我就知道该从哪些方面入手:
- 先检查代码,看看有没有死循环或者无限递归。
- 再看看内存占用情况,是不是内存不足。
- 如果还是找不到问题,就去网上搜搜看,参考一下别人的经验。
- 特别要注意一些事件处理函数,比如
onclick
、ondblclick
、onerror
等等,它们有时候可能会引起意想不到的问题。
遇到问题不要慌,一步一步排查,总能找到解决办法的。这回的经历也让我明白,写代码的时候一定要细心,尽量避免一些低级错误。同时也要多学习,多这样才能不断进步,成为一个更厉害的开发者!