Flutter调试技巧总结——高效开发的秘密

Flutter调试技巧总结——高效开发的秘密

(原文;https://juejin.im/post/5bb9b8a75188255c791b1984)

刚开始学前端的时候看到大家都是用的console.log()作为调试的手段,也可以说,很多人只会用console.log()。在学习Flutter开发app的时候,我就在思考,除了使用print()来调试,Flutter还提供了哪些更为高效的调试方法呢?

非常不幸的是,我在开发自己的第一款Flutter App时,就几乎将所有可能遇到的错误类型都踩到了,这也让我意识到我需要对这部分知识做出总结,扩充自己的武器库,提升自己的开发效率。

为什么要总结调试技巧

大部分开发人员调试的时候,都只懂得使用打印。这种方法虽然使用方便,但是只会这种方法不能在复杂的代码中高效debug,效率低下,容易打击开发人员的信心。

工欲善其事,必先利其器。掌握强大的调试工具,是提高开发效率,提升开发体验,促进正向循环的关键保证。

能够养成良好的开发习惯,促进我们深入思考bug出现的原因,而不是让debug流于表面。

都有哪些调试技巧

我将自己遇到的错误类型归 语法和代码错误 、 运行时错误 和 逻辑错误 三大类,同时还从官方文档总结了 界面调试 的技巧,分享给大家。

一、语法和代码错误 [入门]

语法和代码错误是一种比较低级的错误,指的是在编写代码过程中,IDE就已经显示出来的警告或者错误信息。如果我们不修复它,在保存代码的之后,IDE就不会编译代码并推送到设备上。

解决办法很简单,就是通过阅读红线上的错误信息,然后分析自己的代码哪里出错了。在Flutter的开发过程中,有如下几种典型错误,可以说是新手必犯,如果你跟我一样,把这些错误类型都踩了个遍,那么说明你还处于入门阶段。

缺少引用

在Flutter中,由于一切皆为widget的理念,几乎每写一个 .dart文件都涉及到了widget,而如果涉及到widget都必须引入material.dart或者cupertino.dart这些导出了widgets.dart的文件。不要以为在main.dart中有了import 'package:flutter/material.dart';,其它.dart文件就不需要了。

错字

符号错误

在Dart中,必须以分号作为语句结束的标识,分号是不能省略的。了解更多关于Dart的语法知识,可以参考官方文档

二、运行时错误 [重点]

运行时错误是指,编写代码过程中不会出现,但是当App运行时,就会将错误信息打印在App中(例如黄色警告条、红屏)以及控制台里。这些错误信息会告诉你哪里出现了错误,以及出错后该如何修复。

修复运行时错误的一大难点就是,不懂得如何阅读错误日志。我根据自己遇到的运行时错误,划分了两大类,并总结了相应的排查方法。

有出错堆栈的

>need-to-insert-img

对于这种有出错堆栈信息的,只需要找到错误原因和定位到错误代码,即可快速解决问题。

有指导内容的

对于这种有官方指导内容的,需要细心阅读其说明,才能解决问题。以图中的提示为例,Flutter发现我们的widget太大了以致于超过了渲染区域,官方建议我们使用flex因子来强制约束子数组们的大小,又或者是改用ListView组件。(学好英语很重要!)

三、逻辑错误 [难点]

逻辑错误是指,在App运行过程中,App没有出现上述的任何运行时错误或者崩溃,但是App上的运行结果并不符合我们的预期

这类错误通常难以定位,最常见的解决办法就是,找到相应业务的代码,检查方法的调用、数值的计算或者是参数的传递是否有问题。如果无法通过这种简单的方法排查问题,那么就要开始使用Flutter的调试工具了。

以我的真实案例举例:

addResult(result) {    // 我没有意识到需要调用this.setState()才能更新数据到界面    results.add(result);  }复制代码

print函数

我的初步判断是,addResult函数没有被调用,但是当我添加了print函数之后,打脸了

addResult(result) {    results.add(result);print(results);    // 打印结果显示,addResult函数被调用了,而且results数组也新增加了成员  }复制代码

print函数能够将任何对象打印到调试控制台中,在Flutter框架里,大部分的类都实现了toString函数(如例子里的List对象),可以很方便快速地排查这些小问题。

断点调试

很多人不常用断点调试,是因为他们觉得使用起来很麻烦。实际上在VS Code中,Flutter的断点调试开启只需要两步:

启动断点调试之后,在VS Code顶部就会悬浮一个工具条,该工具条的各个按钮用法如下:

在断点调试的过程中,可以通过鼠标指针,实时查看指定的对象的值

还可以在左侧的调试面板中,查看全部的变量信息和调用堆栈信息

断点调试的最大好处在于,可以帮助你一步一步地跟踪调用过程,在每一步中观察对象的值的变化,找到值变化与预期不符合的那一步,即可排查问题。即使是很复杂的代码结构和很繁琐的调用步骤,也能降低理解代码的难度

四、界面调试

在Flutter框架中,有一个很有用的界面调试工具,那就是Debug Painting,即可以给界面绘制布局边界。

在VS Code中,开启该绘制功能十分简单,只需要在Flutter App调试的过程中,打开命令面板(cmd+shift+p),输入Flutter Toggle Debug Painting

可以看到还有许多可以开启的功能,我认为对于界面调试而言,最重要的功能还是Debug Painting,它可以很清晰的展示出每个元素的布局边界,迅速帮开发者找出布局出问题的地方,还是拿我自己开发计算器App的过程来举个例子:

如图所示,当我把App的整体功能开发完毕之后,它在iPhone XS Max模拟器上显示的非常完美,但是在Android 720p的机型上显示却十分糟糕。我通过开启Debug Painting,找出了部分按钮的字体没有居中的原因——在Android 720p机型上,字体的高度比想象中的要大,导致其无法很好地居中在父布局里。

总结

内容很多,最后总结一下,本文根据我之前开发计算器App的过程中,踩到的坑,总结出了 三种错误类型 和 一种界面调试方法

错误类型:语法和代码错误(三种典型例子)、运行时错误(两种排查方法)和 逻辑错误(两种调试方法)。

界面调试:利用好Flutter的界面调试工具Debug Painting。

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

推荐阅读更多精彩内容