移动端调试神器(TCon)-- 基于 try catch 捕获所有异常的web移动端控制台(调试工具、console)

TCon

基于 try catch 捕获所有异常的移动端调试工具


线上体验


1. 效果图
2. Why TCon
3. 基本用法
4. webpack loader
5. 编写一个tcon插件

1.效果图

tcon 功能
功能图


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


2.Why TCon

2.1 捕获所有异常

tcon 是一个移动端web调试工具, tcon使用 try catch 语句来包裹所有可执行的代码,其目标是捕获web应用程序上发生的所有的异常
这是它与现有的web移动端调试工具的主要区别,也是tcon的优势

现有移动端调试工具几乎都是对 window.onerror 事件进行监听来捕获异常,并且劫持 console上的方法来实现打印
然而 window.onerror 只能监听到一些初始化时执行的代码异常,对于大多数异常不能监听到

比如下面的代码会触发一个 Uncaught TypeError

function f(){
	var json = {};
	json.a.a.a=1;
}
f()

这个异常并不会被 window.onerror 捕获,这也就会导致现有的工具在发生这种故障时无能为力

而tcon可以很好地解决这个问题

2.2 便捷地输入并运行js代码

移动端输入一些 js 代码可以说是非常费时间的一件事情,敲打关键字,中英文、符号、数字之间的切换都是不胜其烦

tcon 提供了 js 里常用的关键字和符号,并对 编辑器进行了优化,让您在输入时体验到高效和便捷

tcon 同时兼容 pc 键盘输入 ,支持代码高亮提示和自动补全

shift + enter 可以快捷运行代码

2.3 简洁的插件系统

tcon 提供了独立的插件系统,并且把 log 功能作为一个插件推出而不是集成在tcon中

使用者可以动态选择加载想要使用的插件,如果觉得功能不够用,您也可以来开发一个自己的插件

tcon提供了一些公有的 api 方便您更高效的开发插件

2.4 使用简单、体积小巧

您可使用 npm 或者直接引入 script 来使用tcon,没有api调用操作,十分简单

基础js库和log插件加起来只有 24kb 的大小,这其中还包含了大部分的css样式代码

使用webpack loader 或 tconCode.js由于会引入抽象语法树,所以体积会有比较大

但是这可以通过灵活的加载策略和配置选择在生产环境中禁用掉,并不会影响线上用户体验

2.5 灵活的加载策略

可以使用 npm 安装加载,也可以通过直接引入script标签加载

可以通过url参数来控制是否加载

3.基本用法

1.安装tcon主模块

npm install tcon-main

或 script 标签引入

<script src="https://www.theajack.com/tcon/dist/tcon/tcon.1.1.2.min.js"></script>

2.安装tcon-log插件

npm install tcon-log

或 script 标签引入

<script src="https://www.theajack.com/tcon/dist/plugin/log/tcon-log.1.1.2.min.js"></script>

如果 通过 script 标签引入 可引入

<script src="https://www.theajack.com/tcon/dist/loadTcon.js"></script>

该js会自动加载最新版本,并自动初始化

3.使用

import tcon from 'tcon-main';
//import tcon 主模块之后会生成一个 window.TCon 对象,这主要是提供给通过script标签引入方式使用的,这里可以忽略
import 'tcon-log';

tcon.init(); // 默认开启tcon调试

tcon.init(true); 
// 表示将根据url参数决定是否开启调试,如果参数中有tcon=1或true,则开启调试
// 开启一次以后 浏览器会记录下状态,除非 使用url参数tcon=0,否则会一直存在

若是使用 script 标签引入 tcon
请使用 window.TCon 对象

4.其他方法

tcon.text.insert('str'); // 向代码编辑器中插入代码
tcon.text.value('str'); // 设置代码编辑器的代码
tcon.text.value(); // 获取代码编辑器中的代码
tcon.use(Plugin); // 引入一个插件,下面的插件章节会具体讲解

4.webpack loader

4.1 使用

tcon-loader 会将您指定的需要调试的js代码中的适当语句使用try catch包裹,
如果没有使用tcon-loader,则无法监听到 uncatch error,只能劫持 console方法和window.onerror 事件

安装tcon-loader

npm install tcon-loader --save-dev

在您项目地webpack配置中加入 loader:‘tcon-loader’

...
{
	test: /\.js$/,
	loader: 'tcon-loader',
	include: [
		path.resolve(__dirname, '您的需要调试的开发目录,一般为src')
	],
	exclude: /node_modules/
}
...

注:

1.若是某些文件您不希望使用loader处理,请在js文件顶部加上 /* tcon-disable */

2.请指定include目录,并指定 exclude: /node_modules/ 否则构建时间可能会很长

3.如有使用babel-loader,建议在babel-loader之前加上 tcon-loader

4.建议只在开发和测试环境使用,在打包发布生产环境时,建议移除 tcon-loader,因为这会生成很多的try catch语句,可能会引起性能问题

4.2 配置参数

使用 options 参数可以为tcon-loader指定一些自定义配置,以满足不同的性能和精度需求。

...
{
	test: /\.js$/,
	loader: 'tcon-loader',
	options:{
		Return:false,
		Declaration:false,
		traverse:false
	}
	include: [
		path.resolve(__dirname, '您的需要调试的开发目录,一般为src')
	],
	exclude: /node_modules/
}
...

其中配置参数信息如下:

属性类型默认值描述
traverseBooleantrue当匹配到某个语句并用try catch包裹之后,是否继续对AST继续向下遍历
ExpressionBooleantrue是否匹配 表达式 语句
ReturnBooleanfalse是否匹配 return 语句
ThrowBooleanfalse是否匹配 throw 语句
DeclarationBooleanfalse是否匹配 变量声明语句 语句
contextBooleanfalsetry catch接获异常之后是否打印上下文环境
traceBooleanfalse使用console.trace()打印调用栈

4.3 tconCode.js

若是没有使用 webpack,您可以使用 tconCode.js 来编译您的代码

script 标签引入:

<script src="https://www.theajack.com/tcon/dist/tconCode/tconCode.1.1.2.min.js"></script>

引入 tconCode之前您需要先引如入 tcon.js

<script src="https://www.theajack.com/tcon/dist/tcon/tcon.1.1.2.min.js"></script>

然后 您可以使用

TCon.code('window.alert(1)')
/*
	返回值:
	"try {
		window.alert(1)
	} catch (error) {
		window.TCon.f(error);
	}"
*/

5.编写一个tcon插件

如果您希望tcon有更加酷炫的功能,欢迎您帮助贡献插件

一个典型的插件模板是这样的:

export default class{
    constructor(){
        this.title = 'MyPlugin'; // 必须有的一个属性,会被显示到tab上
    }
    mounted(){
		// 插件被渲染到panel之后会触发
    }
    onShow(){
        // 插件显示时被调用
    }
    onHide(){
        // 插件隐藏式被调用
    }
    onPageResize(size){
		// 插件容器大小改变时被调用 
		// size={width,height}
    }
}

你可以载插件中直接引用这句代码加载插件 if(window.TCon){window.TCon.use(MyPlugin);}
这句代码并不会马上被执行,而是会等待 tcon init执行完成之后才会加载插件

您也可以通过引入插件之后 通过 tcon.use(MyPlugin) 来加载插件,如

import tcon from 'tcon-main';
import MyPlugin from 'MyPlugin';
tcon.init();
tcon.use(MyPlugin);

注:
1.mounted钩子会在插件被渲染到panel之后会触发,此时已经将以下几个属性注入到了插件上了:

属性类型描述
tabDOM元素组件的tab,通过点击这个tab可以切换到这个组件
pageDOM元素渲染UI的容器
indexNumber当前组件处在组件列表中的位置
toolObjecttcon工具方法库

其中 tool 有如下几个方法:

属性参数备注返回值
createtag,class,text,click创建一个dom元素,参数分别表示标签,类,文本,点击事件,除了tag,其他都是可选,如果没有,请传入一个空字符串dom元素
attrdom,name,value给一个dom设置属性,参数分别表示元素,属性名,属性值dom元素
appenddom,(dom or Array)]给一个dom添加孩子节点,可以是dom或者dom 数组dom元素
addStylecss,[id]添加一个全局样式,css为css代码,id为要给style设置的id值,可选style元素
hasClassdom,name判断dom元素是否还有某类名Boolean
addClassdom,name or Array给dom元素添加类dom元素
rmClassdom,name or Array给dom元素删除类dom元素
replaceClassdom or Array,name1,name2用name2来替换name1类dom or Array
activedom,…给dom元素添加一个 tc-active 类-
inactivedom,…给dom元素移除一个 tc-active 类-

tool 这个工具只是为了开发插件时更方便的对DOM操作,并不是必须的

----end----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值