前端常用调试方式

一、调试技术的起源

1947年,哈佛大学,一只飞蛾粘在一个继电器上,导致计算机无法正常工作,操作员把飞蛾移除之后,计算机又恢复了正常运转。于是他们将这只飞蛾贴在了他们当时记录的日志上,并在日志最后写了这样一句话:First actual case of bug being found。这是他们发现的第一个真正意义上的 bug,这也是人类计算机软件历史上发现的第一个 bug。他们也提出了一个词,“debug(调试)”了机器,由此引出了计算机调试技术的发展。

二、那些好用工具:

按照工具罗列,讲述每个工具中我认为好用的功能

Chrome插件

前端跟Chrome打交道最多,我们开发的网页审查元素、抓包网络请求都离不开Chrome,用什么工具都不如在Chrome内闭环解决。推荐几个调试相关的插件:

篡改猴,原名tamperMonkey。可以很方便地往页面注入脚本,之前用它统计过小程序的端到端成功率(爬微信开发者后台接口返回数据)。比如我们前边提到的页面注入vConsole,就可以用篡改猴实现

(function() {     'use strict';     var script = document.createElement('script');     script.src="//npm.elemecdn.com/eruda";     document.body.appendChild(script);     script.onload = function () { eruda.init() }     // Your code here... })();

给掘金注入调试脚本

Proxy SwitchyOmega

是我用的时间最长的chrome插件。将Chrome的网络请求转到各种服务上的插件,比如Charles的启动的服务默认端口8888,就需要

ModHeader

ModHeader没啥说的,说几个骚操作,比如你需要下载一段js粘到项目里,或者下载一张cdn图片。你可以这样:

当然也可以配置cors

还有很多,比如ModHeader、JSON格式化、二维码生成、JSON对比、Vue/React状态查看插件等等就不一一列举了。

Charles

charles是个古老的debug工具,他太好用了。如果你还不会我建议你好好学学。阿里郎可以直接申请正版

抓包工具三部曲:

给电脑装ssl证书。你电脑跑着代理工具就相当于服务器了,电脑需要ssl证书跟手机发来的请求做握手请求交换数据

给自己手机装ssl证书。安卓手机放弃吧,想抓https需要应用放开口子。iPhone可以自己信任证书

给simulator装ssl证书。同手机

强烈安利的功能:

BreakPoint 接口断点调试,对于接口有超时设置比较短的情况无能为力

Rewrite 用于开发中把线上域名映射到本地localhost资源

Map Remote 接口中转,你拿到了一个线上页面地址,需要验证他预发环境的接口请求是否正常

Map Local 接口mock开发,需要处理本地文件请求跨域。缺点是charles不会帮你管理json文件

Export Session 导出给别人做接口请求参考,比如没有接口文档的情况下,导入进来就能看接口请求链路

Whistle

Charles的同质化应用,相比之下,Whistle优点很多,我建议你忘掉Charles,全心去拥抱他:

免费不用破解不用花钱,文档全,易用;

whistle是开源的,你可以给他写插件,且技术栈是nodejs;

映射规则配置简单,至少比Charles Rewrite的规则简单太多;

whistle甚至可以运行在server端做负载均衡,毕竟是nodejs程序,可以纯命令形式运行;

mock本地json文件,不需要处理本地问题cors,且可以帮你托管json文件;

charles有的功能,whistle基本都具备。charles没有的功能,whistle也具备。

也有缺点:

不适合大规模推广,比如你有个需求测试过程需要映射一个域名,或者mock一个response body,教会测试同学使用whistle的成本将会比Charles高不少。

推荐的功能:

包含以上Charles的推荐功能(BreakPoint功能是Whistle开箱不支持的,除非你安装插件)

Composer 用来重发请求、构造请求,可以自定义请求的url、请求方法、请求头、请求内容。一个微型postman。

Weinre 真机调试,审查元素

PostMan

chrome插件应用已经下线,现为web应用

https://web.postman.co/workspace/My-Workspace~94a8c926-eccc-4149-8891-692e041c2ef0/request/902887-30db8630-0c4b-a0c5-899a-e98c3db1cd54

推荐功能:Export导出接口

适合场景:前后端一起联调,后端把联调完完成的接口直接用PostMan导出,发送给前端,前端一边看着接口文档,一边使用PostMan验证接口信息

Simulator + Safari

适合场景:需要依赖App新开发的桥能力。模拟器+新debug包+Charles代理本地Server

Android ADB调试

非常好用的安卓真机调试方案,在安卓平台无可取代

需要下载 Android platform-tools 工具包

配置adb全局命令

开启手机的开发者模式(不同手机型号可能不同)

需要一根安卓数据线

使用 Chrome 访问 chrome://inspect

vConsole

vConsole本身没什么好讲的,h5应用调试利器,同质的应用还有eruda等。使用姿势可以推荐下:

页面document中,根据环境引入eruda并初始化

function envname() {   try {     var host = location.host;     if (host.includes('nr.ele.me')) {       return host.includes('ppe-') ? 'pre' : 'prod';     }     if (host.includes('elenet.me')) {       return 'daily';     }     if (host.includes('be.dev.ele.me')) {       return 'pre';     }     return 'prod';   }catch(e) {     return 'prod';   } } if(envname() !== 'prod'){   var script = document.createElement('script'); script.src="//npm.elemecdn.com/eruda"; document.body.appendChild(script); script.onload = function () { eruda.init() } }

使用Whistle注入eruda

使用山海关Chrome插件直接注入eruda、vConsole等脚本

AppDevTools

内网发现的神器,为啥给他单独列一类拿来讲,因为看着类似Weinre,真机调试工具,真机调试在某些场景还是很重要。

https://aliyuque.antfin.com/apptools/appdevtools/about

小程序调试

除小程序开发者工具外,真机调试类似vConsole(需要打开开发者模式)

也可以使用Charles、Whistle这种抓包工具抓包

转一篇文良讲的安卓小程序真机Chrome调试

钉钉文档 - 钉钉统一身份认证

AntMan

https://aliyuque.antfin.com/antman/guide/about

饿了么App抓包神器,App开发+mist卡片抓包适用

Flipper

为新Hermes引擎定制的新一代RN调试工具。原调试神器RNDebugger已经无法适配最新的js引擎。可inspect元素、network请求、查看log等。

expo项目接入方式及效果图:

metro项目接入效果图

除使用Flipper调试RN应用之外,使用RN自带的chrome devTools 也可以,只不过无法抓包network请求,可以借助charles等工具。

VSCode

配合vscode调试功能,生成launch.json文件,可以指定process.env

三、写在最后

工欲善其事必先利其器。以上虽然不是每一个coder必备技能,却是很重要的软技能。掌握更多样化的调试技术,会提高我们解决问题的效率、打开思路开阔眼界。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值