您现在的位置:首页 » 新闻动态 » 公司新闻 公司新闻
如何做一个App里的web调试小工具
发布日期:2016-10-07

       我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的。相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌面浏览器的开发者工具,导致我们在有时候在调试的时候不知道到底报了什么错。所以我们需要一个能够在调试app内h5的调试工具,方便我们定位bug。

       现在市面上已经有很多比较成熟的工具可以用,例如jsconsole、weinre,都是平常会用到的。但是我自己还是想做一个debug工具,一方面是这些调试工具有一定学习成本,我们能不能就引入一个js就能开始调试呢?另一方面这些工具只能在开发阶段使用,那么我想在让线上的网页直接上报bug到服务器,方便我们内部直接获取呢?

web前端报错都有哪些?

       要做这样一个工具,我们首先得知道前端的报错里面都有哪些:

JavaScript运行时错误

try,catch时主动抛出的错误

资源(img、script、link等)下载时的错误

ajax请求时的错误

……

如果获取这些错误信息?

错误类型 触发机制 错误类型

1.JavaScript运行时错误 通过监听window的error事件获取 ErrorEvent

2.try,catch时主动抛出的错误 通过catch(e)的参数e获取 Error

3.资源下载时的错误 通过监听元素的error事件获取 Event的error类型

4.ajax请求时的错误 通过监听window的error事件获取 ErrorEvent

try,catch

try { throw new Error;}catch (err) { callback(err) // err为Error的实例 }

window.onerror

window.onerror = function(message, source, lineno, colno, error) { ... }

element.onerror

element.onerror = function(event) { ... }

相关的属性

      在上面的几种错误类型里,Error的prototype上有一些属性可供实例访问获得,而ErrorEvent继承自Event,但ErrorEvent本身增加了一些类似Error的属性可供获取,所以我们可以通过一样的属性获取相关字段信息。而Event的error类型则不同,我们下文再详述。

Error的属性

属性 描述

Error.prototype.constructor Error实例原型的构造函数

Error.prototype.message 错误信息描述

Error.prototype.stack 发生错误的堆栈跟踪

ErrorEvent的属性

属性 描述

ErrorEvent.prototype.constructor ErrorEvent实例原型的构造函数

ErrorEvent.prototype.message 错误信息描述

ErrorEvent.prototype.filename 发生错误的脚本文件的文件名

ErrorEvent.prototype.lineno 错误发生时所在的行号

ErrorEvent.prototype.lineno 错误发生时所在的列号

ErrorEvent.prototype.error 发生错误时所抛出的 Error 对象

      可以看到ErrorEvent对象里的error属性是一个Error的实例,因此我们可以获得这两个错误类型的堆栈跟踪,从而获取出错的代码位置。

      而Event的error类型无法获取错误的相关堆栈,因此我们只能通过event.target去获取触发这一事件的元素是谁。

      小工具debuggerjs

      通过上面的总结,我们已经知道前端会出现的一些常见错误情况,根据上面的思路,我自己写了一个小工具debuggerjs,奉上github地址:https://github.com/zyf394/debuggerjs,欢迎吐槽,如果可以的话帮忙点个star哦~

       TODOList

      增加打log时上报服务器的逻辑

      处理代码压缩后获取的报错信息可读性弱的问题

      其他说明

       如果使用zepto或者jQuery,在error回调里获取的error参数只是一个XHR对象,无法获取对应的error对象(why?)

  • 1.公司登记注册于2003年1月27日,清远市桑达电子网络媒体有限公司
    2.公司2006年起成为清远市政府定点协议供货商,电子采购供货商
    3.公司2007年被清远市相关政府部门评为安防行业状元
    4.公司2007年起成为长城电脑清远如意服务站(SP368)
    5.公司2007年承建清远市横河路口电子警察工程,开创清远电子警察先河。
  • 6.公司2007年起成为IBM合作伙伴、公司2010年底成为金蝶软件清远金牌代理(伙伴编号:30030013)
    7.公司组团队参加南方都市报组织的创富评选,获广东80强。公司申请多项软件著作权、专利权
    8.2016年起公司成为粤东西北地区为数不多的双软企业,确立“让软件驱动世界,让智能改变生活!"企业理想
    9.2016-01-29更名为广东互动电子网络媒体有限公司
    10.2021-01-13更名为广东互动电子有限公司
  • 投资合作咨询热线电话:0763-3391888 3323588
  • 做一个负责任的百年企业! 天行健,君子以自强不息;地势坤,君子以厚德载物;
    为用户创造价值! 让软件驱动世界; 让智能改变生活; 超越顾客期望,帮助顾客成功;
    对客户负责,对员工负责,对企业命运负责!帮助支持公司的客户成功;帮助忠诚于公司的员工成功!
  • 联系电话:0763-3391888 3323588 3318977
    服务热线:18023314222 QQ:529623964
  • 工作QQ:2501204690 商务QQ: 602045550
    投资及业务投诉QQ: 529623964
    微信:小米哥 微信号:qysed3391888
    腾讯微博:桑达网络-基石与起点
  • E-MAIL:222#QYSED.CN ok3391888#163.com (请用@替换#)
在线客服
  • 系统集成咨询
    点击这里给我发消息
  • 网站\微信\软件咨询
    点击这里给我发消息
  • 售后服务
    点击这里给我发消息
  • 投资合作
    点击这里给我发消息