Mobile Web 调试指南(2):远程调试
原文:http://blog.jobbole.com/68606/
原文出处: 阿伦孟的博客(@allenm )
第一篇中讲解了如何让手机来请求我们开发电脑上的源码,做到了这步后,我们可以改完代码立即看到效果,但是对于调试还是远远不够的。这篇文章我们继续讲目前常用的几种 Developer tools。
PC 端的经验
在使用桌面浏览器开发时,几乎每种浏览器都有自己的开发者工具,比如大家常用的 firebug , chrome develper tools , safari developer tools . 哪怕是 IE 甚至 IE6,也有自己的开发者工具。我们利用这些工具来检查调试样式、javascript,查看修改 cookie , 查看网络请求 等等。这些大家都非常熟悉了。
移动端的方案
手机端的浏览器或者 webview 不可能在手机上集成一个 developer tools ,因为屏幕太小。好在各大厂商还是很关注开发者的便利性的,现在有多种远程调试的方案。也就是在手机上加载页面,在电脑上来展示调试工具。下面我们看看目前主流的一些工具。
iOS 平台
Safari Mobile
safari 支持远程调试,需要做如下的几步:
- 在手机里找到 设置 -> safari -> 高级 -> Web 检查器 ,打开此功能。
 - 用数据线连接到你的 Mac(没有 Mac ? 找老板要去!)。
 - 打开 Mac 下的 safari , 到偏好设置里,高级一栏最下部,勾选在菜单栏中显示“开发”菜单
 - 用手机 safari 访问一个网页,在Mac上的 safari 开发菜单里找到你的手机,二级菜单里找到这个网页
 
做完这些,我们就进入了熟悉的 safari developer tools ,调试 css , js 网络请求等。
iOS webview
iOS APP 里的 webview 同样支持远程调试,不过限制更多一点。这个 APP 必须是自己编译安装进手机的,也就是你必须要有 iOS 开发者账号。对于做 Hybrid APP 开发的来说,这不是什么难事,团队肯定有开发者账号。你需要做的是了解一点 iOS 开发基础,起码能自助把代码编译安装到你的手机。
对于自己编译进去的 APP ,只需要在 APP 里载入你要调试的页面,其他步骤和 safari 的远程调试一样。
Android 平台
Chrome Mobile
Chrome for android 32 以及之后的版本具有远程调试的功能,你需要做的是:
- 开启 Android 的 USB 调试功能。
 - 用 USB 先连接到你的电脑(windows 用户需要安装 Android 驱动)。
 - 在 Chrome for android 上打开你要调试的网页。
 - 在电脑上打开 chrome (同样最低需要 32 版本),进入 菜单 -> 工具 -> 检查设备 页面,确保 Discover USB devices 被勾选
 
如果设置正确的话,现在就可以看到你手机上打开的页面了,点击 inspect 进入我们熟悉的 Chrome develper tools 。
由于 Android 手机各种各样,如果遇到麻烦,请仔细阅读 官方文档
Android Webview
Android 4.4 开始,默认的浏览器已经是 chrome 了,所以 webview 也是 chrome 了,这就给了 webview 远程调试的能力。我们需要在 Android 里针对 Webview 做以下设置:
1
2
3
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
然后在你的 App 里打开要调试的页面,其余步骤和使用 Chrome for Android 一样,进行远程调试。
使用 Android 模拟器
鉴于目前 Android 4.4 的手机还比较少,你可以选择使用模拟器来进行调试。官方的模拟器太慢,推荐大家使用 genymotion , X86 架构的模拟器,速度和真机没什么两样了。对于只做 webview 调试的前端来说,只需要使用个人免费版就可以了。
其他方式
如果你的调试条件不能满足上面讲的任何一种,还可以使用 weinre 。只需要在页面里插入一段脚本,就可以进行远程调试,基本没其他限制。但是使用这个也是有明显的缺点的:
- 不能给 javascript 打断点,基本只能用 console 来调试
 - 不支持查看元素的样式是写在 css 第几行,也不支持显示在哪个文件
 - 由于是通过网络来连接的,所以在调试移动网络的情况时,不好操作(需要服务端运行在一个移动网络可以访问到的机器上)
 
总之,weinre 仅仅适用于你没办法使用 Safari 或者 Chrome 进行远程调试的情况下,聊胜于无,调试 Android hybrid APP 时,经常会遇到这个情况。
总结
综上所述,可以根据下图来选择最优的调试方案:
由于我目前只接触了 iOS 和 Android 平台的开发调试,其他的移动平台不了解,所以本文没涉及到 windows phone 等平台。欢迎大家留言或者 email 交流各种远程调试方案。
Mobile Web 调试指南(2):远程调试的更多相关文章
- 安卓手机移动端Web开发调试之Chrome远程调试(Remote Debugging)
		
一.让安卓打debug模式的apk包 二.将电脑中的chrome升级到最新版本,在chrome浏览器地址栏中输入chrome://inspect/#devices: 在智能手机还未普及时,移动设备的调 ...
 - 移动应用调试之Inspect远程调试
		
移动应用调试之Inspect远程调试 一.准备工作 chrome浏览器,建议最新版本 如果你点击inspect打开的DevTools窗口一片空白,且刷新无效时,那极有可能是由于被墙的缘故. 二.Ins ...
 - Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序
		
系列目录 [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...
 - Visual Studio 调试系列11 远程调试
		
系列目录 [已更新最新开发文章,点击查看详细] 你可以调试已部署在另一台计算机的 Visual Studio 应用程序. 要进行此操作,可使用 Visual Studio 远程调试器. 01 ...
 - Eclipse进行远程调试(Tomcat远程调试)
		
1.配置tomcat Linxu系统: tomcat/bin/catalina.sh或者startup.sh开始处中增加如下内容: declare -x CATALINA_OPTS="-Xd ...
 - VS本地调试  Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储
		
vs2017 调试一致都没啥问题,今天莫名报这个错误,感觉好奇怪,网上搜索了半天也没解决,最后看着错误信息感觉很诡异,我本地调试你给我启动远程调试监测器干嘛,localhost也访问不了,ping了一 ...
 - 一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试
		
一:背景 1. 讲故事 每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇: 我去,本地环境代码跑的哧溜,上了测试环境出问题 ...
 - 移动端Web开发调试之Chrome远程调试(Remote Debugging)
		
比如手机钉钉调试页面,下面是一位同学整理的链接: http://blog.csdn.net/freshlover/article/details/42528643/ 如果inspect 后,一直空白, ...
 - pycharm快捷键、配置virtualenv环境,配置django调试,配置远程调试
		
pycharm安装和首次使用 http://blog.csdn.net/chenggong2dm/article/details/9365437 快捷键: 找文件.代码.引用相关 1.双击shift ...
 - 远程调试hadoop各组件
		
远程调试对应用程序开发十分有用.例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序.其他情况包括:运行在内存小或 CUP 性能低的设备上的 Ja ...
 
随机推荐
- 第八章 管理类型(In .net4.5) 之 加强封装
			
1. 概述 本章内容包括 访问控制符.属性 和 显式接口实现. 2. 主要内容 2.1 访问控制符 封装的核心是隐藏信息.访问控制符用来实现类型成员的访问控制. C#的访问控制符有:public, i ...
 - lldb
			
所有命令选择与input 值用 -- 区分 1 p/x 16 转16进制 https://sourceware.org/gdb/onlinedocs/gdb/Output-Formats.html ...
 - DataGridView的DataGridViewCheckBox问题
			
datagridview有一列DataGridViewCheckBox,但连续点击的话(1秒点击N次),会导致出错,数据处理不正确,感觉 private void dgv_CellContentCli ...
 - JS把函数当作参数传递
			
getDescPage("commonPage","/page/common/tips/tips.html",init()); $("#"+ ...
 - EMVTag系列1《数据分组》
			
数据分组的设计在个人化过程中承担着重要的作用.数据分组标识符(DGI)是两字节十六进制数.数据分组标识的第一个字节等于'01'到'1E',表明数据存储的SFI.第二个字节表明SFI记录的记录编号.其他 ...
 - chmod命令用法
			
指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix ...
 - 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
			
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
 - 浅谈.NET中闭包
			
什么是闭包 闭包可以从而三个维度来说明.在编程语言领域,闭包是指由函数以及与函数相关的上下文环境组合而成的实体.通过闭包,函数与其上下文变量之间建立起关联关系,上下文变量的状态可以在函数的多次调用过程 ...
 - 008--VS2013 C++ 位图半透明化(另一种显示)
			
注:主要变化是在下面这张位图上的操作 //全局变量HBITMAP bg, girl;HDC mdc;//起始坐标const int xstart = 50;const int ystart = 20; ...
 - Html5最简单的游戏Demo——Canvas绘图的弹弹球
			
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...