专栏首页子曰五溪Flutter 调试技巧

Flutter 调试技巧

对于前端的同学在调试时我们有很多方式可以用,比如 Chrome Dev Tools ,你可以在 Elements 上调试布局和样式,也可以利用 console.log 来打印变量,当然也有较多的栈信息让你来判断错误和 debug,相应的 Flutter 也有很多调试技巧可以辅助我们更好的进行开发并解决问题。

当我们很难预估一个值时,最简单的方式是将这个值打印出来,通过控制台来查看输出的信息,由于我们使用了 Dart 来开发 Flutter ,因此我们可以使用 debugPrint 等同于 console.log 的方式来打印它。

不过这种方式在复杂的场景中就显得效率低下,并且有可能会打击你的信心。当然调试做为一个工程师必备的手段,我们应该用更高效的方式和工具来辅助我们,一旦你养成了良好的习惯,这些辅助也是你深入bug原因的起点,为你的职业生涯添加浓厚的一笔资产。

对于语法和入门级的错误,不管是 VSCode 还是 Android Studio 都会通过标红的方式反馈给你,你可以根据编辑器或IDE给出的经典信息来做判断,这一阶段的实践也会为你写代码的严谨带来较多的思考。但是,当你遇见运行时的错误时,这样的方式可能就有一些力不从心了,不过,我们有一些其他的技巧来辅助你完成这些判断。

第一种方式是通过错误堆栈来定位具体的错误,对于这样的错误 Flutter 一般会给予一些经典的错误信息,多数情况下,你都可以通过 Google 完成排除错误的过程。当然如果遇见了复杂的错误,这种定位的方式就像是阅读一层又一层的树,在这颗树中,我们可以从最起始的位置开始,当它发生在什么地方,假设这个被你定义了一个复杂的函数来处理数据,我们可以在代码中阅读这一段函数的逻辑,通过数据的对比,来查找一些可能的处理逻辑错误。

在这个错误中我们可以看见因为网络的问题抛出了一个 failed。

其次我们可以利用断点调试的功能,在VSCode的调试面板中,我们可以时时的查看变量的值,以及跟踪执行的步骤,在这个过程中,我们可以查看堆栈,也可以根据逻辑来做进一步的判断。

多数情况下我们使用 Flutter 是来绘制 UI,界面的调试在 debug 模式下其实没有什么用,但是我们可以利用 VSCode 的 Toggle Debug Painting 来启动界面调试工具,通过这些辅助线我们可以很方便的查阅到为什么布局和我们的预期有所不同。

当然在渲染层中,我们也可以通过debugDumpRenderTree()存渲染树,通过这颗树的仔细对比来定位问题,这些小小技巧多数情况下,是使用不上的。


不过,如果遇到很棘手的问题,多数情况下我会使用 Android Studio 来完成调试,因为它提供的功能和工具,比之 VSCode 不知道增强了多少,就比如调试界面,我们可以在 Android Studio 中启动 Flutter Inspector 能看到一个完整的层级以及我们可以自由的选中某一层级;

另外 Android Studio 中默认就安装了 Dart Analysis ,这个工具能辅助我们完成有问题代码的分析并且给出建议,当然VSCode中也有这样的功能,但是不知道为什么个人感觉Android Studio中提供的更完善和强大。如果你是Android 开发,在调试技巧这个层面上,我想你应该比前端开发人员拥有更多的优势,因为 Android Studio 做为你“吃饭”的家伙,肯定已经玩的很溜了。

说了这么多,调试最重要的还是细心和耐心,没有这两颗心,人一躁起来问题就很难解决了;

本文分享自微信公众号 - 子曰五溪(fed-talk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android远程调试Web页面

    曾经有一段时间专门处理了一下远程调试的事情,要解决的问题是不依赖Chrome如何在移动设备中调试Web页面。有时候真的奇怪,因为我们老是自己制造问题,因为“墙”...

    icepy
  • 解决自己的一个小需求

    有时候找文档总是忘记一些单词,需要借助 Google 搜索一下才能找到,因此很迫切需要一个 Chrome Extension 收录一些自己常用的文档,只为在我想...

    icepy
  • Go HTTP

    在网络编程里多数情况下,我们都在处理HTTP请求,关于请求协议的部分我推荐阅读《TCP协议》这本书,绝对值得购买。Go语言也提供了一个标准库包net/http,...

    icepy
  • IPython、Notebook、qtconsole使用教程

    IPython、Notebook、qtconsole使用教程 上一篇为Python,IPython,qtconsole,Notebook,Jupyter快速安...

    王小雷
  • #AndroidDevSummit,就在此刻!

    近日,我们在加州山景城的计算机历史博物馆召开了 Android 开发者峰会,回顾了 Android 过去 10 年的历程,继而为 Android 开发者们介绍了...

    Android 开发者
  • 远程调试,你值得拥有

      远程调试就是用本地的代码调试服务器上的代码,稍微想想怎么能做到呢,肯定是本地和远程服务上的虚拟机之间实现了相互通讯啊.。术语话一点,就是本地和远程的JVM之...

    用户1615728
  • CNCF案例研究:作为容器的早期采用者,Spotify从自家制容器编排器迁移到Kubernetes

    作为微服务和Docker的早期采用者,Spotify已经将运行在其所有VM上的微服务容器化,并使用了名为Helios的自家制容器编排系统。到2017年底,情况变...

    CNCF
  • Android P 开发者预览版首发!

    Android 开发者
  • 【ICCV 目标跟踪性能最优】首个应用残差学习的深度目标跟踪算法

    【新智元导读】不同于在目标检测和识别等领域取得的丰硕成果,深度学习在目标跟踪领域进展相对缓慢,很大原因是缺乏数据——目标跟踪只有第一帧的标定框作为训练数据,在这...

    新智元
  • 英伟达教你用深度学习做图像修复,确定不试一下?

    深度学习是人工智能中发展最快的领域之一,被广泛的应用在很多领域,尤其是实时目标检测、图像识别和视频分类。深度学习通常采用卷积神经网络、深度信念网络、循环神经网络...

    AI研习社

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动