H5 移动调试全攻略

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

一、概要

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

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

二、iOS 设备

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

  • 浏览器设置:Safari – 偏好设置 – 高级 – 勾选「在菜单栏中显示开发」菜单
  • iphone 设置:设置 – Safari – 高级 – 打开 Web 检查器

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

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

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

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

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

三、抓包

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

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

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

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

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

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

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

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

四、Spy-Debugger

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

我们先来安装:

 
 
 
 
 

JavaScript

 
1
> sudo npm install spy-debugger -g

启动命令:

 
 
 
 
 

JavaScript

 
1
> spy-debugger

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

 
 
 
 
 

JavaScript

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

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

  • Android 设置代理步骤:设置 – WLAN – 长按选中网络 – 修改网络 – 高级 – 代理设置 – 手动
  • iOS 设置代理步骤:设置 – 无线局域网 – 选中网络 – HTTP 代理手动

接下来,尝试一下抓包:


再打开调试页面:

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 编写插件扩展功能

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

 
 
 
 
 

JavaScript

 
1
sudo npm install -g whistle

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

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

 
 
 
 
 

JavaScript

 
1
2
3
4
5
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 来启动服务:

 
 
 
 
 

JavaScript

 
1
w2 start

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

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

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

六、安装 HTTPS 证书

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

 
 
 
 
 

JavaScript

 
1
help-SSL - Proxying - install Charles root

弹出安装证书的提示框:

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

对于 spy-debuggerHTTPS 抓包,需要安装根证书,选择 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,一个轻量、可拓展、针对手机网页的前端开发者调试面板。安装很简单:

 
 
 
 
 

JavaScript

 
1
npm install vconsole

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

 
 
1
2
3
4
5
6
<head>
  <script src="path/to/vconsole.min.js"></script>
  <script>
    var vConsole = new VConsole();
  </script>
</head>

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

 
 
 
 
 

JavaScript

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

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

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

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

九、场景分析

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

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

1.SafariiPhone 调试利器,查错改样式首选;
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.类库异常,兼容问题 ☆
这种场景也会经常遇到,我们需要用可以调试页面异常的方式,如 SafariSpy-DebuggerWhistlevConsole 查看异常日志,从而迅速定位类库位置,从而找寻替换或是兼容方案。

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

5.Debug 包 ☆☆☆
在你的项目中装上 vConsole,并配合客户端 debug 插件,360 度无死角监控异常,这才是最有效的方式。

6.ES6 语法兼容 ☆
一般我们都会通过 Babel 来编译 ES6 ,但是额外的第三方类库如果有不兼容的语法,低版本的移动设备就会异常。所以,先用上文讲述的调试方法,确定异常,然后去增加 polyfill来兼容吧。

H5 移动调试全攻略的更多相关文章

  1. VSCode+Xdebug断点调试PHP(全攻略)

    一直都想把php断电调试记录下来,由于拖延症极其严重导致现在才写. 好了,刚去猛喝了几碗心灵鸡汤,趁着这股劲把"Visual Studio Code如何使用XDebug进行php断点调试&q ...

  2. VSCode插件开发全攻略(六)开发调试技巧

    更多文章请戳VSCode插件开发全攻略系列目录导航. 前言 在介绍完一些比较简单的内容点之后,我觉得有必要先和大家介绍一些开发中遇到的一些细节问题以及技巧,特别是后面一章节将要介绍WebView的知识 ...

  3. 用C#制作PDF文件全攻略

    用C#制作PDF文件全攻略 目  录 前    言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...

  4. (转)战斗bug技巧全攻略

    原文地址:http://www.cnblogs.com/manuosex/p/3736077.html 程序员不是有一幅这样的对联吗 上联:一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然 ...

  5. Android-x86虚拟机安装配置全攻略

    转自Android-x86虚拟机安装配置全攻略 注:这里安装从简,具体请参考虚拟机Vmware安装运行安卓4.0详细教程 Android-x86虚拟机安装配置网上有很多,但是全部说明白的确不多,希望这 ...

  6. QTP DataTable全攻略(1)

    上一篇 / 下一篇  2009-07-27 00:14:16 / 个人分类:qtp 查看( 575 ) / 评论( 0 ) / 评分( 0 / 0 ) 下面的代码可能有点乱,基本涉及到常用的datat ...

  7. VS2013全攻略(安装,技巧,快捷键,插件)!

    工欲善其事,必先利其器.VS2013全攻略(安装,技巧,快捷键,插件)! 之前一篇<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥>承蒙大家喜爱和编辑推荐,在此 ...

  8. VSCode插件开发全攻略(七)WebView

    更多文章请戳VSCode插件开发全攻略系列目录导航. 什么是Webview 大家都知道,整个VSCode编辑器就是一张大的网页,其实,我们还可以在Visual Studio Code中创建完全自定义的 ...

  9. VSCode插件开发全攻略(四)命令、菜单、快捷键

    更多文章请戳VSCode插件开发全攻略系列目录导航. 命令 我们在前面HelloWord章节中已经提到了命令写法,这里再重温一下. context.subscriptions.push(vscode. ...

随机推荐

  1. HTML5 canvas绘制图形

    demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. 【和孩子一起学编程】 python笔记--第五天

    关于python2在python3中的改动: https://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5MDEyMDk4Mw==&appmsgid=1 ...

  3. pycharm之black配置for python file(代码格式化工具)

    一.介绍下black 源码;https://github.com/ambv/blackpei 二.具体步骤 第一步 安装black: 从命令行安装:例如Windows的cmd窗口,运行命令pip3 i ...

  4. XSS漏洞基础

    什么是XSS? XSS全程Cross-site scripting,跨站脚本攻击.恶意攻击者往Web页面里插入html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用 ...

  5. 容器————vector

    目录 一.介绍 二.声明及初始化 三.方法 front find remove erase substr 一.介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为 ...

  6. (转)Java 原子性引用 AtomicReference

    链接:https://www.jianshu.com/p/882d0e2c3ea6 來源:简书  作者:专职跑龙套 AtomicReference An object reference that m ...

  7. git分支回退以及目录回退

    分支回退 git checkout - 目录回退 cd -

  8. 重新认识new

    前言 感谢大佬:https://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html www.cplusplus.com 因为这段时间在重 ...

  9. 1.OpenCV数据类型

    基础类型 1.模板类cv::Vec<> 固定向量类,维度已知的小型向量——处理效率高 2.cv::Point类(Point2i,Point2f,Point2d;Point3i,Point3 ...

  10. sizeof 运算结果与编译系统有关

    研究与实现相关的layout没多大意义 参考:有关c++中类的虚拟继承sizeof问题 情况1:<剑指offer>纪念版题,sizoef(空类)的结果? class A{}; sizeof ...