2022-04-12

一、简介

移动端调试一直都是一个痛点,因为移动终端对于我们来说是一个黑盒,它无法像PC端一样,我们可以通过F12很方便的调出开发者工具。在开发中经常会遇到同样一份代码在某个型号的手机上运行出现错误,其他手机都好好的,开发的时候Chrome上也没有报错。如果没有调试工具这种情况下我们就很难定位问题,接下来的主题就是介绍如何使用spy-debugger + Charles进行移动端调试。

二、安装

全局安装 spy-debugger

npm install spy-debugger -g

三、spy-debugger证书

其实spy-debugger的代理是基于node-mitmproxy模块实现的,这里安装的证书其实是node-mitmproxy的证书,标题写spy-debugger证书是为了和Charels证书区分开来避免混淆。

电脑安装证书

第1步:在命令行中执行spy-debugger启动spy-debugger服务,启动成功后,检查你的用户目录(home目录),会发现多了一个node-mitmproxy文件夹,这个文件夹内放的就是代理需要的证书。

我Mac电脑完整的路径是:/Users/dongxin/node-mitmproxy

一、简介

移动端调试一直都是一个痛点,因为移动终端对于我们来说是一个黑盒,它无法像PC端一样,我们可以通过F12很方便的调出开发者工具。在开发中经常会遇到同样一份代码在某个型号的手机上运行出现错误,其他手机都好好的,开发的时候Chrome上也没有报错。如果没有调试工具这种情况下我们就很难定位问题,接下来的主题就是介绍如何使用spy-debugger + Charles进行移动端调试。

二、安装

全局安装 spy-debugger

npm install spy-debugger -g

三、spy-debugger证书

其实spy-debugger的代理是基于node-mitmproxy模块实现的,这里安装的证书其实是node-mitmproxy的证书,标题写spy-debugger证书是为了和Charels证书区分开来避免混淆。

电脑安装证书

第1步:在命令行中执行spy-debugger启动spy-debugger服务,启动成功后,检查你的用户目录(home目录),会发现多了一个node-mitmproxy文件夹,这个文件夹内放的就是代理需要的证书。

我Mac电脑完整的路径是:/Users/dongxin/node-mitmproxy

第2步:在启动spy-debugger服务的电脑上安装证书,双击node-mitmproxy.ca.crt文件,选择登录之后确认

第3步:双击node-mitmproxy CA 选择为 始终信任

[图片上传失败...(image-371ccd-1649767641726)]

第4步:输入你电脑的用户密码

出现这个+号表示证书已经安装成功
[图片上传失败...(image-920960-1649767792500)]

IOS手机安装证书

第1步:首先需要将node-mitmproxy.ca.crt上传到手机上,可以通过live-server 在node-mitmproxy.ca.crt文件所在的目录下启动这个服务。如果你还没有live-server命令,可以通过以下命令进行安装:

npm install live-server -g

在/Users/dongxin/node-mitmproxy目录下执行live-server命令

第2步:在手机浏览器上访问这个服务,输入我电脑的IP地址和端口进行访问,⚠️手机和电脑必须是连接同一个WiFi网络才可以访问。

点击node-mitmproxy.ca.crt文件进行下载安装

[图片上传失败...(image-6dc129-1649767641726)]

第3步:在手机的 设置 > 通用 > 描述文件与设备管理 找到node-mitmproxy CA 证书,并点击安装

输入手机锁屏密码,选择安装

[图片上传失败...(image-44fab8-1649767641726)]

第4步:在手机的 设置 > 通用 > 关于本机 > 证书信任设置 将 node-mitmproxy CA 打开

[图片上传失败...(image-ac74f4-1649767641726)]

Android手机安装证书

安卓端的设置简单很多,直接

点击更多设置—>找到对应网络—>点击右箭头进入—>代理—>手动—>输入IP和port

之后打开相应的h5页面,此时如果有弹窗提示是否信任,选择信任即可

此时,spy-debugger的前期准备工作就已经全部完成了

四、Charles证书

这里简单介绍一下Charles的证书安装,Charles如果不安装证书的话是无法抓https的请求的。

第1步:点击Charles的Help > SSL Proxying > Install Charles Root Cetificate 然后就会弹出证书安装页面,将Charles的证书设置为始终信任即可:

第2步:点击Charles的Proxy > Access Control Settings 进行配置让手机连接代理时,不需要点允许连接确认操作

上述配置,表示允许任意IP的设备连接该代理服务,不会有允许连接确认对话框。

IOS手机安装证书

第1步:点击Charles的Help > SSL Proxying > Install Charles Root Cetificate on a Mobile Device or Remote Browser 然后会弹出一个对话框,告诉你手机要设置的代理IP地址和端口,⚠️注意:手机和电脑必须连接同一个WiFi才可以。

第2步:根据提示在手机上配置Wi-Fi网络代理,在手机上点击 设置 > 无线局域网

第3步:点击你当前所连接的WiFi网络

第4步:向下滑动,点击配置代理,选择手动,服务器和端口输入Charles对话显示的IP和端口号,配置好后,记得点击存储。

第5步:在Safari浏览器输入chls.pro/ssl ,下载并安装证书

第6步:在手机的 设置 > 通用 > 描述文件与设备管理 找到Charles Proxy CA 证书,点击安装

第7步:在手机的 设置 > 通用 > 关于本机 > 证书信任设置 将 Charles Proxy CA 打开

Android手机安装证书

第1步:点击Charles的Help > SSL Proxying > Install Charles Root Cetificate on a Mobile Device or Remote Browser 然后会弹出一个对话框,告诉你手机要设置的代理IP地址和端口,⚠️注意:手机和电脑必须连接同一个WiFi才可以。

第2步:根据提示在手机上配置Wi-Fi网络代理,在手机上点击 设置 > 无线局域网

第3步:点击你当前所连接的WiFi网络

第4步:向下滑动,点击配置代理,选择手动,服务器和端口输入Charles对话显示的IP和端口号,配置好后,记得点击存储。

第5步:在浏览器输入chls.pro/ssl ,下载证书

第6步:手机设置 > wlan > 高级设置 > 从存储设备安装(安装证书) > 找到证书后点击安装

此时,Charles所有的准备工作都完成了,接下来我们就可以启动spy-debugger进行移动端H5调试了。

五、启动spy-debugger

第1步:启动命令

也可以使用-e参数设置Charles作为外部代理服务

启动spy-debugger服务,并设置外部代理为Charles的服务

spy-debugger -e http://127.0.0.1:8888


上述命令表示启动spy-debugger调试服务,并将所有的资源请求都转发到Charles的代理服务上。其实我们打开Charles程序的时候,它实际上是在本地启动了一个http的服务。

第2步:在手机上设置代理服务器和端口为spy-debugger的IP和端口:

第3步:在浏览器打开[http://127.0.0.1:63214/client](http://127.0.0.1:59365/client/)

第4步:在京东App里随便找一个H5页面打开,或者在手机浏览器上打开 [https://m.jd.com/](https://m.jd.com/)

第5步:此时在浏览器上的Remote选项卡上就可以看到,连接的终端了

第6步:我们可以在Elements选项上进行页面元素的选择和调试,可以发现我们鼠标放到元素上,手机端上会实时看到选中效果

第7步:我们还可以在Console选项卡下查看代码输出的console信息,我们也可以这里输入页面要执行的代码

第8步:此时我们发现所有的请求都被转发到了Charles上

## 六、weinre简介

Weinre是单词缩写,全称是网页远程审查(Web Inspector Remote),可以在PC上调试运行在移动端上的页面。

### 操作界面

#### 1.Remote面板

[图片上传失败...(image-ba7c89-1649767641726)] 

targets:所有代理的页面,绿色标识表示正在被调试的页面

clients:所有调试的终端,支持多个,比如同时用chrome和firefox调试

server properties:代理服务的参数信息

#### 2.Elements面板

[图片上传失败...(image-69979f-1649767641726)] 

A:查看,修改,删除Dom元素,目前还不能增加DOM元素。
B:查看,修改,删除Dom元素属性,目前不支持增加DOM元素属性。
C:查看,修改,删除,增加 CSS属性。

#### 3.Resources面板

[图片上传失败...(image-3a6da4-1649767641726)] 

查看,修改,删除localStorage/sessionStorage。
测试发现:不能删除,修改,增加???

#### 4.Network面板

[图片上传失败...(image-ed62cc-1649767641726)] 

查看XHR请求信息,虽然该面板中有各种网络请求的类型,但是目前只能查看XHR请求记录。

#### 5.Timeline面板

[图片上传失败...(image-c8be67-1649767641726)] 

查看target中触发的事件时间信息(触发事件)。目前只支持两种事件:setTimeout/setInterval和用户指定的事件(通过在事件处理函数中调用console.markTimeline('tag')函数指定)

#### 6.Console面板

[图片上传失败...(image-d285-1649767641726)] 

用来执行JS语句和表达式,以及展示console的方法输出。

## 七、spy-debugger命令

#### 端口

(默认端口:9888)

spy-debugger -p 8888


#### 设置外部代理(默认使用AnyProxy)

spy-debugger -e http://127.0.0.1:8888


spy-debugger内置AnyProxy提供抓包功能,但是也可通过设置外部代理和其它抓包代理工具一起使用,如:Charles、Fiddler。

#### 设置页面内容为可编辑模式

该功能使页面内容修改更加直观方便。 (默认: false)

spy-debugger -w true


内部实现原理:在需要调试的页面内注入代码:`document.body.contentEditable=true`。暂不支持使用了iscroll框架的页面。

#### 是否允许weinre监控iframe加载的页面

(默认: false)

spy-debugger -i true


#### 是否只拦截浏览器发起的https请求

(默认: true)

spy-debugger -b false有些浏览器发出的connect请求没有正确的携带userAgent,这个判断有时候会出错,如UC浏览器。这个时候需要设置为false。大多数情况建议启用默认配置:true,由于目前大量App应用自身(非WebView)发出的请求会使用到SSL pinning技术,自定义的证书将不能通过app的证书校验。


#### 是否允许HTTP缓存

(默认: false)

spy-debugger -c true


到这里spy-debugger + Charles进行移动端调试的接入流程就介绍完了,更多关于spy-debugger的功能和使用方法,可以参考spy-debuger的[官方文档](https://www.npmjs.com/package/spy-debugger)


第2步:在启动spy-debugger服务的电脑上安装证书,双击[node-mitmproxy.ca](http://node-mitmproxy.ca/).crt文件,选择登录之后确认

第3步:双击node-mitmproxy CA 选择为 始终信任

[图片上传失败...(image-b9570d-1649767613088)] 

第4步:输入你电脑的用户密码

出现这个+号表示证书已经安装成功

[图片上传失败...(image-c6f398-1649767613088)] 

### IOS手机安装证书

第1步:首先需要将[node-mitmproxy.ca](http://node-mitmproxy.ca/).crt上传到手机上,可以通过live-server 在[node-mitmproxy.ca](http://node-mitmproxy.ca/).crt文件所在的目录下启动这个服务。如果你还没有live-server命令,可以通过以下命令进行安装:

`npm install live-server -g`

在/Users/dongxin/node-mitmproxy目录下执行live-server命令

第2步:在手机浏览器上访问这个服务,输入我电脑的IP地址和端口进行访问,⚠️手机和电脑必须是连接同一个WiFi网络才可以访问。

点击[node-mitmproxy.ca](http://node-mitmproxy.ca/).crt文件进行下载安装

[图片上传失败...(image-9ee3e8-1649767613088)] 

第3步:在手机的 设置 > 通用 > 描述文件与设备管理 找到node-mitmproxy CA 证书,并点击安装

输入手机锁屏密码,选择安装

[图片上传失败...(image-a9c5e-1649767613088)] 

第4步:在手机的 设置 > 通用 > 关于本机 > 证书信任设置 将 node-mitmproxy CA 打开

[图片上传失败...(image-f93318-1649767613088)] 

### Android手机安装证书

安卓端的设置简单很多,直接

点击更多设置—>找到对应网络—>点击右箭头进入—>代理—>手动—>输入IP和port

之后打开相应的h5页面,此时如果有弹窗提示是否信任,选择信任即可

此时,spy-debugger的前期准备工作就已经全部完成了

## 四、Charles证书

这里简单介绍一下Charles的证书安装,Charles如果不安装证书的话是无法抓https的请求的。

第1步:点击Charles的Help > SSL Proxying > Install Charles Root Cetificate 然后就会弹出证书安装页面,将Charles的证书设置为始终信任即可:

第2步:点击Charles的Proxy > Access Control Settings 进行配置让手机连接代理时,不需要点允许连接确认操作

上述配置,表示允许任意IP的设备连接该代理服务,不会有允许连接确认对话框。

### IOS手机安装证书

第1步:点击Charles的Help > SSL Proxying > Install Charles Root Cetificate on a Mobile Device or Remote Browser 然后会弹出一个对话框,告诉你手机要设置的代理IP地址和端口,⚠️注意:手机和电脑必须连接同一个WiFi才可以。

第2步:根据提示在手机上配置Wi-Fi网络代理,在手机上点击 设置 > 无线局域网

第3步:点击你当前所连接的WiFi网络

第4步:向下滑动,点击配置代理,选择手动,服务器和端口输入Charles对话显示的IP和端口号,配置好后,记得点击存储。

第5步:在Safari浏览器输入chls.pro/ssl ,下载并安装证书

第6步:在手机的 设置 > 通用 > 描述文件与设备管理 找到Charles Proxy CA 证书,点击安装

第7步:在手机的 设置 > 通用 > 关于本机 > 证书信任设置 将 Charles Proxy CA 打开

### Android手机安装证书

第1步:点击Charles的Help > SSL Proxying > Install Charles Root Cetificate on a Mobile Device or Remote Browser 然后会弹出一个对话框,告诉你手机要设置的代理IP地址和端口,⚠️注意:手机和电脑必须连接同一个WiFi才可以。

第2步:根据提示在手机上配置Wi-Fi网络代理,在手机上点击 设置 > 无线局域网

第3步:点击你当前所连接的WiFi网络

第4步:向下滑动,点击配置代理,选择手动,服务器和端口输入Charles对话显示的IP和端口号,配置好后,记得点击存储。

第5步:在浏览器输入chls.pro/ssl ,下载证书

第6步:手机设置 > wlan > 高级设置 > 从存储设备安装(安装证书) > 找到证书后点击安装

此时,Charles所有的准备工作都完成了,接下来我们就可以启动spy-debugger进行移动端H5调试了。

## 五、启动spy-debugger

第1步:启动命令

也可以使用-e参数设置Charles作为外部代理服务


启动spy-debugger服务,并设置外部代理为Charles的服务

spy-debugger -e [http://127.0.0.1:8888](http://127.0.0.1:8888/)

上述命令表示启动spy-debugger调试服务,并将所有的资源请求都转发到Charles的代理服务上。其实我们打开Charles程序的时候,它实际上是在本地启动了一个http的服务。

第2步:在手机上设置代理服务器和端口为spy-debugger的IP和端口:

第3步:在浏览器打开http://127.0.0.1:63214/client

第4步:在京东App里随便找一个H5页面打开,或者在手机浏览器上打开 https://m.jd.com/

第5步:此时在浏览器上的Remote选项卡上就可以看到,连接的终端了

第6步:我们可以在Elements选项上进行页面元素的选择和调试,可以发现我们鼠标放到元素上,手机端上会实时看到选中效果

第7步:我们还可以在Console选项卡下查看代码输出的console信息,我们也可以这里输入页面要执行的代码

第8步:此时我们发现所有的请求都被转发到了Charles上

六、weinre简介

Weinre是单词缩写,全称是网页远程审查(Web Inspector Remote),可以在PC上调试运行在移动端上的页面。

操作界面

1.Remote面板

[图片上传失败...(image-d2cefd-1649767613088)]

targets:所有代理的页面,绿色标识表示正在被调试的页面

clients:所有调试的终端,支持多个,比如同时用chrome和firefox调试

server properties:代理服务的参数信息

2.Elements面板

[图片上传失败...(image-15a58e-1649767613088)]

A:查看,修改,删除Dom元素,目前还不能增加DOM元素。
B:查看,修改,删除Dom元素属性,目前不支持增加DOM元素属性。
C:查看,修改,删除,增加 CSS属性。

3.Resources面板

[图片上传失败...(image-3c4370-1649767613088)]

查看,修改,删除localStorage/sessionStorage。
测试发现:不能删除,修改,增加???

4.Network面板

[图片上传失败...(image-3df029-1649767613088)]

查看XHR请求信息,虽然该面板中有各种网络请求的类型,但是目前只能查看XHR请求记录。

5.Timeline面板

[图片上传失败...(image-4d63c1-1649767613088)]

查看target中触发的事件时间信息(触发事件)。目前只支持两种事件:setTimeout/setInterval和用户指定的事件(通过在事件处理函数中调用console.markTimeline('tag')函数指定)

6.Console面板

[图片上传失败...(image-bdb7bc-1649767613088)]

用来执行JS语句和表达式,以及展示console的方法输出。

七、spy-debugger命令

端口

(默认端口:9888)

spy-debugger -p 8888

设置外部代理(默认使用AnyProxy)

spy-debugger -e http://127.0.0.1:8888

spy-debugger内置AnyProxy提供抓包功能,但是也可通过设置外部代理和其它抓包代理工具一起使用,如:Charles、Fiddler。

设置页面内容为可编辑模式

该功能使页面内容修改更加直观方便。 (默认: false)

spy-debugger -w true

内部实现原理:在需要调试的页面内注入代码:document.body.contentEditable=true。暂不支持使用了iscroll框架的页面。

是否允许weinre监控iframe加载的页面

(默认: false)

spy-debugger -i true

是否只拦截浏览器发起的https请求

(默认: true)

spy-debugger -b false有些浏览器发出的connect请求没有正确的携带userAgent,这个判断有时候会出错,如UC浏览器。这个时候需要设置为false。大多数情况建议启用默认配置:true,由于目前大量App应用自身(非WebView)发出的请求会使用到SSL pinning技术,自定义的证书将不能通过app的证书校验。

是否允许HTTP缓存

(默认: false)

spy-debugger -c true

到这里spy-debugger + Charles进行移动端调试的接入流程就介绍完了,更多关于spy-debugger的功能和使用方法,可以参考spy-debuger的官方文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容