【移动端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存在很多问题, ...
随机推荐
- PAT B1035 插入与归并 (25 分)
根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...
- (转)win7批量创建用户
@echo off::zhangsan 改为你需要建立的用户名,123456改为你的密码,后面的两个参数的意思是“用户::不可以更改密码”和“密码永不过期”net user xiaowei 12345 ...
- 虚拟机VirtualBox安装MAC OS 10.12图文教程
VirtualBox虚拟机安装Mac OS 10.12图文教程的准备 1.VirtualBox虚拟机 下载地址:https://www.virtualbox.org/ 特别提醒:推荐官方下载,安装Vi ...
- SJA1000 CAN驱动程序演示实验
SJA1000 CAN驱动程序演示实验 2016-04-12 20:41:22来源: eefocus 关键字:SJA1000 CAN 驱动程序 演示实验 收藏 评论(0) 分享到 微博 QQ ...
- 第13章 GPIO—位带操作
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- URL Encode
用VC实现post数据常常会遇到URL编码问题 在此封装一个工具类进行UTF8编码的转换 源码来自php source code 只是简单的封装给C++调用 //URL 编解码类 //来自PHP源 ...
- 大数据入门第十六天——流式计算之storm详解(一)入门与集群安装
一.概述 今天起就正式进入了流式计算.这里先解释一下流式计算的概念 离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据 ...
- 20155333 《网络对抗》 Exp9 Web安全基础
20155333 <网络对抗> Exp9 Web安全基础 基础问题回答 1.SQL注入攻击原理,如何防御? 原理: 通过在用户名.密码登输入框中输入一些',--,#等特殊字符,实现引号闭合 ...
- JAVAWEB 项目注册登录模块问题总结
tomcat: 假如tomcat服务器启动出现错误,那就可能是servlet或代码的原因 tomcat服务器出现不能访问页面的情况,可以在eclipse tomcat服务器设置里设置为共享服务器模式 ...
- pycharm最常用的快捷键总结
工欲善其事必先利其器,Python开发利器Pycharm常用快捷键以及配置如下,相信有了这些快捷键,你的开发会事半功倍 一 常用快捷键 编辑类: Ctrl + D 复制选定的区 ...