原文链接:如何做一个App里的web调试小工具

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

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

web前端报错都有哪些?

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

  1. JavaScript运行时错误
  2. try,catch时主动抛出的错误
  3. 资源(img、script、link等)下载时的错误
  4. 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

  1. 增加打log时上报服务器的逻辑
  2. 处理代码压缩后获取的报错信息可读性弱的问题

其他说明

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

【移动端debug-6】如何做一个App里的web调试小工具的更多相关文章

  1. 做一个 App 前需要考虑的几件事

    做一个 App 前需要考虑的几件事  来源:limboy的博客   随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...

  2. 做一个App前需要考虑的几件事

    本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后, ...

  3. 涨姿势:创业做一个App需要花多少钱(8个人,6个月,就要100万,附笔记心得)

    (原标题:涨姿势:创业做一个App要花多少钱?) 作为互联网从业者,被外行的朋友们问及最多的问题是,“做一个网站需要多少钱?”或者“做一个APP需要多少钱?”. 作为做过完整网站项目和APP的人,今天 ...

  4. [转载]做一个 App 前需要考虑的几件事

    本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...

  5. 创业成本?亲身经历告诉你做一个app要多少钱

    导语:作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网站需要多少钱?”或者“做一个APP需要多少钱?” 作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网 ...

  6. 尝试用kotlin做一个app(写在前面)

    学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...

  7. 一个Json结构对比的Python小工具兼谈编程求解问题

    先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...

  8. 分享一个WPF 实现 Windows 软件快捷小工具

    分享一个WPF 实现 Windows 软件快捷小工具 Windows 软件快捷小工具 作者:WPFDevelopersOrg 原文链接:https://github.com/WPFDevelopers ...

  9. 推荐一个linux下的web压力测试工具神器webbench

    推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29   来源:   评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, ...

随机推荐

  1. dom4j加载xml文件

    ## dom4j加载xml文件 ``` // 1. 加载xml文件 InputStream is = MyTest.class.getResourceAsStream("user.xml&q ...

  2. qmlscene: could not find a Qt installation of ''

    qt └── helloqt.qml 在qt目录下运行helloqt.qml文件时出现这个提示: $ qmlscene helloqt.qml qmlscene: could not find a Q ...

  3. .NetCore Session.Redis (转载)

    首先创建ASP.NET CORE Web项目,然后按如下顺序操作. 1.添加nuget程序包: Microsoft.AspNetCore.Session; Microsoft.AspNetCore.D ...

  4. 20155226 Exp2 后门原理与实践

    20155226 Exp2 后门原理与实践 第一次实验博客交了蓝墨云未在博客园提交,链接 1.Windows获得Linux Shell 在windows下,打开CMD,使用ipconfig指令查看本机 ...

  5. 20155302《网络对抗》Exp5 MSF基础应用

    20155302<网络对抗>Exp5 MSF基础应用 实验内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如 ...

  6. Hiberante持久化对象的3种状态

        近日一同事问我关于Hibernate中对象的3种状态的问题,因此特意总结一下.在Hibernate中对象是有以下3中状态: 瞬时态(transient object): 没有OID值,没有被s ...

  7. Android开发——Fragment知识整理(二)

    0.  前言 Android开发中的Fragment的应用非常广泛,在Android开发--Fragment知识整理(一)中简单介绍了关于Fragment的生命周期,常用API,回退栈的应用等知识.这 ...

  8. 编程语法分析之“优先级”和“结合律”

    上节<编程语法分析之从表达式说起>中说到表达式,他的主要作用就是返回一个值!那这个值具体是多少,就要看表达式的整个运算过程.要理解表达式的运算过程就必须了解"优先级"和 ...

  9. 几种flash存储芯片的用途和分类

    1.IIC EEPROM------容量小,采用的是IIC通信协议:用于在掉电时,存系统配置参数,比如屏幕亮度等.常用芯片型号有 AT24C02.FM24C02.CAT24C02等,其常见的封装多为D ...

  10. 【第十一课】Tomcat原理解析【转】

    目录 一.Tomcat顶层架构 二.Tomcat顶层架构小结: 三.Connector和Container的微妙关系 四.Connector架构分析 五.Container架构分析 六.Contain ...