【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具
我们知道现在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对象。
【移动端debug-6】如何做一个App里的web调试小工具的更多相关文章
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- 做一个App前需要考虑的几件事
本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后, ...
- 涨姿势:创业做一个App需要花多少钱(8个人,6个月,就要100万,附笔记心得)
(原标题:涨姿势:创业做一个App要花多少钱?) 作为互联网从业者,被外行的朋友们问及最多的问题是,“做一个网站需要多少钱?”或者“做一个APP需要多少钱?”. 作为做过完整网站项目和APP的人,今天 ...
- [转载]做一个 App 前需要考虑的几件事
本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...
- 创业成本?亲身经历告诉你做一个app要多少钱
导语:作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网站需要多少钱?”或者“做一个APP需要多少钱?” 作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网 ...
- 尝试用kotlin做一个app(写在前面)
学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...
- 一个Json结构对比的Python小工具兼谈编程求解问题
先上代码. jsondiff.py #!/usr/bin/python #_*_encoding:utf-8_*_ import argparse import json import sys rel ...
- 分享一个WPF 实现 Windows 软件快捷小工具
分享一个WPF 实现 Windows 软件快捷小工具 Windows 软件快捷小工具 作者:WPFDevelopersOrg 原文链接:https://github.com/WPFDevelopers ...
- 推荐一个linux下的web压力测试工具神器webbench
推荐一个linux下的web压力测试工具神器webbench2014-04-30 09:35:29 来源: 评论:0 点击:880 用多了apache的ab工具之后你就会发现ab存在很多问题, ...
随机推荐
- Blog Contents
This page is intently left for contents catalog of my articles. |----------------------------------- ...
- HDU1754
https://vjudge.net/contest/66989#problem/B 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜 ...
- Unable to start a VM due to insufficient capacity
今天cloudstack中的一个普通用户创建虚拟机时,总是报错:Unable to start a VM due to insufficient capacity ,看management and a ...
- day45
今日内容 1.css三种引入方式 2.三种引入方式的优先级 3.长度及颜色单位 4.常用样式 5.css选择器 CSS三种引入方式 1.1css引入方式之行间式 行间式(特点): 1.标签头部 ...
- dirname(__FILE__) === __DIR__
dirname(__FILE__) === __DIR__get_class($this) == __CLASS__
- 如何一步一步建立CAN通讯
如何一步一步建立CAN通讯 2016-04-12 20:38:14来源: eefocus 关键字:CAN通讯 硬件环境 收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn CAN通讯的 ...
- tomcat-在eclipse中配置tomcat容器的内存
eclipse下的tomcat内存设置大小 在eclipse中设置: 设置步骤如下: 1.点击eclipse上的debug图标旁边的下拉箭头 2.然后选择Run Configurations, 3.系 ...
- [NOI2003]Editor & [AHOI2006]文本编辑器editor BZOJ1507&BZOJ1269
分析: Splay区间操作裸题,维护出区间信息,按照要求模拟,注意读入格式,并且考虑内存回收(开不下) 附上代码: #include <cstdio> #include <algor ...
- python基础——类定义(转)
一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性.如果直接使用类名修改其属性,那么将直接影响到已经实例 ...
- 6、使用jconsole+VisualVM分析JVM
一.不断增加对象触发GC的代码 VM 参数:-Xms100m -Xmx100m -XX:+UseSerialGC import java.util.ArrayList; import java.uti ...