Mobile调试终极指南解决开发中90%的常见问题

设计师树恺 工具 阅读 1,310
赞 27 收藏
二维码
手机扫码查看
反馈

先说痛点:为啥Mobile调试这么麻烦

搞前端的都知道,移动端调试简直是个黑洞。我前两天刚被一个touch事件搞得头大,明明在PC上模拟器看着没问题,一到真机就各种抽风。特别是涉及到一些复杂的手势操作和CSS动画,问题更是层出不穷。

Mobile调试终极指南解决开发中90%的常见问题

最烦的是,很多时候连报错信息都看不到。Android还好点,至少能通过chrome://inspect看到设备,iOS简直就是个黑匣子。不过别急,今天我就把我常用的几种方法分享出来,亲测有效。

Chrome DevTools:基础但必须掌握

先说最基本的,Chrome自带的DevTools其实已经够用了大部分场景。只需要一根数据线,打开手机USB调试模式,然后在地址栏输入chrome://inspect就能看到连接的设备。

这里有几个要点要注意:

  • 确保手机和电脑在同一网络环境下
  • 安卓系统需要开启开发者模式和USB调试
  • iOS设备需要安装对应版本的Safari

核心代码就这几行:

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/sw.js')
        .then(function(registration) {
            console.log('Service Worker registered with scope:', registration.scope);
        })
        .catch(function(error) {
            console.log('Service Worker registration failed:', error);
        });
}

这段代码我经常用在PWA项目里,调试时特别方便。建议直接把devtools固定在单独窗口,这样调试起来更顺手。

这个场景最好用:VConsole

有时候我们没法用电脑调试,比如客户现场反馈问题的时候。这时候我就特别喜欢用腾讯的VConsole,轻量又实用。

使用方法超简单:

<script src="https://unpkg.com/vconsole/dist/vconsole.min.js"></script>
<script>
    // 初始化
    var vConsole = new VConsole();
    console.log('测试日志');
</script>

这里注意下,我踩过坑:生产环境千万别忘记关掉vConsole,不然用户都能看到你的调试信息。建议封装一个简单的开关:

// debug.js
const isDebug = location.hostname === 'localhost' || location.hostname.includes('test');
if (isDebug) {
    const script = document.createElement('script');
    script.src = 'https://unpkg.com/vconsole/dist/vconsole.min.js';
    document.body.appendChild(script);
    script.onload = () => new window.VConsole();
}

踩坑提醒:这三点一定注意

第一,样式适配问题。很多小伙伴习惯在PC端写好样式再看mobile效果,结果发现各种不对劲。建议一开始就用实际设备调试,省得后面改来改去。

第二,触摸事件的坑。click和touchstart的行为差别很大,特别是在fastclick这种库介入后。我之前就遇到过一个bug,在某些安卓机上touchend不触发,后来发现是系统默认行为拦截了。

第三,网络请求问题。真机调试时,接口域名要记得改成线上地址。像这样:

const API_URL = process.env.NODE_ENV === 'production'
    ? 'https://jztheme.com/api'
    : 'http://localhost:3000/api';

fetch(${API_URL}/data)
    .then(res => res.json())
    .then(data => console.log(data));

高级技巧:代理调试法

当遇到特别棘手的问题时,我会用Charles或者Whistle做代理调试。比如有些接口返回的数据有问题,直接抓包看是最准的。

Whistle的配置比较简单:

npm install -g whistle
w2 start

然后在手机WiFi设置里手动配置代理,地址填电脑的局域网IP,端口8899。这样一来,所有请求都能在whistle界面看到了。

这里有个小技巧:可以在whistle里mock接口数据,调试起来很方便。比如:

pattern: https://jztheme.com/api/test
statusCode: 200
response: {"code":0,"message":"success","data":[]}

还有这些神器你可能不知道

除了上面说的这些,还有一些不错的工具推荐给大家:

  • Eruda:类似vconsole,但功能更强
  • React DevTools:调试React组件利器
  • Weinre:老牌调试工具,适合老项目

我个人比较喜欢用React DevTools配合chrome一起用,组件树结构一目了然:

npm install -g react-devtools
react-devtools

最后总结一下

以上是我个人对Mobile调试的一些经验分享。虽然工具很多,但我建议大家先熟练掌握chrome devtools和vconsole,这两个基本能解决90%的问题。代理调试适合处理复杂的网络请求问题,平时用得少一些。

这个技巧的拓展用法还有很多,比如性能调试、内存泄漏检测等,后续会继续分享这类博客。有其他好用的方法也欢迎评论区交流,咱们共同进步。

本文章不代表JZTHEME立场,仅为作者个人观点 / 研究心得 / 经验分享,旨在交流探讨,供读者参考。
发表评论

暂无评论