前情提要
这个问题从我接手的第一个项目开始就遇到过这个问题,那时候还是在游戏组实习,就听隔壁前端组的大喊大叫,为什么有用户反应又出了什么什么问题,怎么又又用不了了。
程序员小哥很淡定的说:“用户用什么浏览器?怎么重现?”。
这个问题对于程序员来说是比较常见的,可能潜意识里面很难理解,竟然有用户不知道自己用的是什么浏览器。然后客服就去沟通用户。
用户反馈:“啊,不就是手机自带的浏览器!”
程序员:“他用什么手机?什么版本,安卓还是ios,安卓版本多少?发生错误之前都做了什么操作?”
客服:“?”
用户:“?”
有趣的是,这个问题来来回回沟通了两三天时间,最后因为用户用的手机是安卓版本较低的,我们公司找不到重现的机子,最终最开始大喊大叫的经理说,“等找到重现手机再说吧,反正也只有这一个用户遇到这个问题”。
后来如何,我想大家都很清楚了。只要是“等以后在做,后续优化”,那基本上这个需求就是被毙了。
那时候我就在想,是只有那一个手机遇到问题,还是那一系列手机都有问题?只有这一个用户遇到这个问题,是真的只有他遇到问题,还是只有他反馈问题呢?其实做开发的,收到正反馈的机会,会比收到负反馈的机会要少的多。有没有什么方式,能够自动记录下来所有用户遇到的问题呢?然后把程序员需要的数据正确反馈上来?
回到我们的问题上,如何追踪线上的错误?那你知不知道如何追踪本地错误呢?(在不打开控制台,没有 debug 的时候。)
如何捕获程序错误?
如何捕获js原生错误?
这个算是基本的js的操作了,其实就是监听 window.onerror。
<!DOCTYPE html>
<html lang="en">
<head>
<script>
window.onerror = function (message, source, lineno, colno, exception) {
console.log(message);
console.log(