热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优秀前端人都知道的H5移动端调试全攻略

文章来源:http:jartto.wang20181101mobile-debug随着移动设备的高速发展,H5开发也成为了F2E不可或缺的能力。而移动开

文章来源:http://jartto.wang/2018/11/01/mobile-debug/

随着移动设备的高速发展,H5 开发也成为了 F2E 不可或缺的能力。而移动开发的重中之重就是掌握调试技巧,修 Bug 于无形。

一、概要

因为移动端操作系统分为 iOS 和 Android 两派,所以本文的调试技巧也会按照不同的系统来区分。寻找最合适高效的方式,才能让你事半功倍。

文章会列举目前适合移动端调试的多种方案,快来选择你的最佳实践吧!

二、iOS 设备

Safari:iphone 调试利器,查错改样式首选,需要我们做如下设置:

  • 浏览器设置:Safari - 偏好设置 - 高级 - 勾选「在菜单栏中显示开发」菜单

  • iphone 设置:设置 - Safari - 高级 - 打开 Web 检查器

大功告成,这时候通过手机的 Safari 来打开 H5 页面,我们通过浏览器开发选项可以看到:

7c252a4e22e1b42ec68c4265f38d69ef.png

iOS 模拟器:不需要真机,适合调试 Webview 和 H5 有频繁交互的功能页面。

首先下载 Xcode ,运行项目,选择模拟器 iphonex,编译后就会打开模拟器,如下:

00cd964b0d055db8201774816a09887a.png

可以看到 H5 已经在「壳子」中运行起来了,下来就可以尝试调用 Webview 的方法,和「壳子」交互了。更多的调试技巧可以参考文章:iOS 模拟器调试。

具体的调试功能还是依赖浏览器的开发选项,与上无异,就不赘述了。

三、抓包

Charles:Mac OS 系统首选的抓包工具,适合查看、控制网络请求,分析数据情况。

Charles 抓包首先需要配置手机代理,Wifi - 配置代理(IP 地址) - 手动,如下图:

54f57f733305dbca5741ba6875d9295e.png01749a4fec9d580d0741ab53caefde51.png

配置好手机代理,这时候打开 Charles ,就会收到确认提醒,选择允许。接下来就可以捕获手机的请求了,但是这些都是常规操作,我们来点高级的。

有意思的是:我们可以用本地文件来替换线上文件,方便调试,远程定位线上问题。

选择 Structure,找到需要替换的文件,右键菜单 - Map Local,如下图:

60e5311419cb602e0a7df773cf3cb2d8.png

这时候就会打开一个弹窗,填写具体的配置:

58d144f95391ab478df694b45e06f5ee.png

OK,大功告成,快去改动本地文件吧,从此再也不怕线上调试了。需要注意的是如果抓取 HTTPS 请求,要安装信任证书,下文会详细说明。

与之相应的是 Windows 平台的 Fiddler,功能大致相似,这里就不细说了。

四、Spy-Debugger

spy-debugger:移动端调试的利器,便捷的远程调试手机页面、抓包工具。

我们先来安装:

> sudo npm install spy-debugger -g

启动命令:

> spy-debugger

这时候,控制台会打印出如下信息,说明服务已经启动了:

正在启动代理
本机在当前网络下的IP地址为:10.200.24.46
node-mitmproxy启动端口: 9888
浏览器打开 ---> http://127.0.0.1:50389

最后一步,设置手机代理:10.200.24.46,端口号:9888。补充说明一下:

  • Android 设置代理步骤:设置 - WLAN - 长按选中网络 - 修改网络 - 高级 - 代理设置 - 手动

  • iOS 设置代理步骤:设置 - 无线局域网 - 选中网络 - HTTP 代理手动

接下来,尝试一下抓包:

6dc73cce18584f111b79a75a850c6c1a.png

再打开调试页面:

ddbd4b940dd387532c188bc8c9687edb.png

HTTPS 抓包,需要安装根证书,下文会详细说明。

五、Whistle

上面推荐了一款操作简单的调试利器,升级一下,看看更加强大的调试工具 whistle

whistle:基于 Node 实现的跨平台 Web 调试代理工具。

whistle(读音[ˈwɪsəl],拼音[wēisǒu])是基于 Node实现的跨平台抓包调试代理工具,有以下基本功能:

  1. 查看 HTTPHTTPS请求响应内容

  2. 查看 WebSocketSocket 收发的帧数据

  3. 设置请求 hosts、上游 http/socks 代理

  4. 修改请求 url 、方法、头部、内容

  5. 修改响应状态码、头部、内容,并支持本地替换

  6. 修改 WebSocket 或 Socket 收发的帧数据

  7. 内置调试移动端页面的 weinre 和 log

  8. 作为 HTTP 代理或反向代理

  9. 支持用 Node 编写插件扩展功能

大致了解后,我们来尝试安装:

sudo npm install -g whistle

淘宝镜像:npm install whistle -g –registry=https://registry.npm.taobao.org

whistle 安装完成后,执行命令 whistle help 或 w2 help,查看 whistle 的帮助信息:

run       Start a front service
start     Start a background service
stop      Stop current background service
restart   Restart current background service
help      Display help information

这里只列出部分命令,更多请 w2 help 查看。

看到上面的操作,我们何不试试缩写 w2 start 来启动服务:

w2 start

看到如下的输出,说明服务已经正常启动了:

5ddd3622b7dff7d19d435a8f40dc8625.png

这时候在浏览器打开链接,同时手机上配置代理(同 Charles),接下来就可以愉快的调试了。值得注意的是,whistle 的功能远非如此,更多的扩展请移步官网文档,贴张图先预览下:

287d2121fa1a1cbbf31e67793ee03138.png

记得开启拦截 HTTPS:勾选 Capture HTTPS CONNECTs

六、安装 HTTPS 证书

对于 Charles,按照如下操作安装证书:

help-SSL - Proxying - install Charles root5953f96310552f9c52ec78f4c5e7df90.png

弹出安装证书的提示框:

d848e68c7a0b9983691eb96eed7b2c8a.png

按照提示去手机浏览器打开:chls.pro/ssl,安装信任证书即可。

对于 spy-debugger,HTTPS 抓包,需要安装根证书,选择 RootCA,扫描二维码按照提示信任证书。安装证书的时候需要注意以下几件事情:

1.手机必须先设置完代理后再通过(非微信)手机浏览器访问 http://s.xxx (地址二维码)安装证书;
2.手机首次调试需要安装证书,已安装了证书的手机无需重复安装;
3.手机和 PC 保持在同一网络下(比如同时连到一个 WIFI 下);

切记:移动设备和 PC 必须在一个 WIFI 下。

七、真机调试

上面说了很多,但是实际开发过程中,我们不会等上线了才去验证兼容性,所以你可能需要提前「真机调试」。这里提供两种方式:

Chrome Remote Devices:依赖 Chrome 来进行远程调试,适合安卓手机。

首先,开启 Android 手机的「开发者选项」,勾选 「USB 调试」。
然后,Chrome 中输入:chrome://inspect,进入调试页面。

很全面的一篇文章,可以参考:Chrome 远程调试。

localhost 转 ip,扫描二维码手机显示,这个比较简单。

可以在浏览器安装一个 Chrome 插件,用于将当前页面链接转换成二维码,这样就能边开发边真机预览,非常方便。

八、调试工具

这里推荐一款调试工具:vConsole,一个轻量、可拓展、针对手机网页的前端开发者调试面板。安装很简单:

npm install vconsole

如果未使用 AMD/CMD 规范,可直接在 HTML 中引入 vConsole 模块。为了便于后续扩展,建议在  中引入:


如果使用了 AMD/CMD 规范,可在 module 内使用 require() 引入模块:

var VConsole = require('path/to/vconsole.min.js');
var vConsole = new VConsole();

请注意,VConsole 只是 vConsole 的原型,而非一个已实例化的对象。

所以在手动 new 实例化之前,vConsole 不会被插入到网页中。大概功能如下图:

23f7c37e70b868990451d114391f4792.pngfe5efe595903ea946ef94fc8474c8e44.png

看起来很完美,但是有个小缺点:网络请求,需要刷新页面,可是很多内嵌的 H5 页面是没有机会刷新页面的,所以需要客户端童鞋配合增加刷新的功能方便调试。

九、场景分析

既然移动端调试有这么多种方案,那在实际操作中,我该如何取舍?

说了这么多钟方案,这里总结一下各个方案的适用场景,根据不同的场景去选择最佳的调试方案,这样才能更快速的输出,Carry 全场:

1.Safari:iPhone 调试利器,查错改样式首选;
2.iOS 模拟器:不需要真机,适合调试 Webview 和 H5 有频繁交互的功能页面;
3.Charles:Mac OS 系统首选的抓包工具,适合查看、控制网络请求,分析数据情况;
4.Fiddler:适合 Windows 平台,与 Charles 类似,查看、控制网络请求,分析数据情况;
5.Spy-Debugger:移动端调试的利器,便捷的远程调试手机页面、抓包工具;
6.Whistle:基于 Node 实现的跨平台 Web 调试代理工具;
7.Chrome Remote Devices:依赖 Chrome 来进行远程调试,适合安卓手机远程调试静态页;
8.localhost 转 ip:真机调试,适合远程调试静态页面;
9.vConsole:内置于项目,打印移动端日志,查看网络请求以及查看 COOKIE 和 Storage;

十、白屏处理

移动端的白屏是最头疼的问题,这里顺带提供几种分析问题的思路,以供参考。

1.方案分析 ☆

一般上线后出现问题,我们最容易想到的就是:是否是新代码引起的问题。所以有效解决手段就是「控制变量法」。

2.代码注释法 ☆

莫名奇妙的白屏,适合页面无异常日志,同时无请求发送,问题集中在单一页面的情况。这种问题比较直观,肯定是某一页面出现了代码异常或是无效的 return,导致页面渲染终止,但并不属于异常。这时候,「代码注释法」将是你的最佳选择,逐行去注释可以代码,直到定位问题。

3.类库异常,兼容问题 ☆

这种场景也会经常遇到,我们需要用可以调试页面异常的方式,如 Safari,Spy-Debugger,Whistle,vConsole 查看异常日志,从而迅速定位类库位置,从而找寻替换或是兼容方案。

4.try catch ☆☆

如果你的项目没有异常监控,那么在可疑的代码片段中去 Try Catch 吧。

5.Debug 包 ☆☆☆

在你的项目中装上 [vConsole](https://link.zhihu.com/?target=http%3A//jartto.wang/2018/11/01/mobile-debug/),并配合客户端 debug 插件,360 度无死角监控异常,这才是最有效的方式。

6.ES6 语法兼容 ☆

一般我们都会通过 Babel 来编译 ES6 ,但是额外的第三方类库如果有不兼容的语法,低版本的移动设备就会异常。所以,先用上文讲述的调试方法,确定异常,然后去增加 [polyfill](https://link.zhihu.com/?target=https%3A//polyfill.io/v2/docs/examples) 来兼容吧。

最后

感谢阅读,欢迎分享给身边的朋友,

记得关注噢,黑叔带你飞!

ede35db9787a791b8357099601dc7297.png

亲,点这涨工资 c02a4e0bcc1e01a5727670cb89bdf8b9.gif


推荐阅读
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 爱奇艺如何使用扫码登录二维码
    本文介绍了在使用爱奇艺时如何通过扫码登录二维码的具体操作方法,包括打开爱奇艺app、点击“我的”按钮、点击扫码按钮等步骤。同时提供了操作环境的相关信息,包括手机品牌型号、系统版本和软件版本。 ... [详细]
author-avatar
睫毛弯弯黄小牛为
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有