Flutter 知识集锦 | 获取函数调用栈

1. 异常时的调用栈信息

我们都知道当代码抛出异常时,会在控制台输出异常信息,从中可以看到异常发生时 函数调用栈 详情。这些信息可以帮助开发者快速定位到异常发生的位置,并且具体到 文件第几行,第几个字符

比如这里是初始的计数器项目,我在 _incrementCounter 方法开始时写了一行异常的代码。这样在运行时点击加号按钮触发方法,就会出现如上的异常信息。

当函数因异常而终止时,其下方的代码将无法执行。

也就是说,此时点击按钮,由于下面的 setState 没有触发,界面上的数值不会变化。但如果把这行异常的语句放在后面,虽然会报错,但不会影响计数器的功能:


2. 捕捉异常时的调用栈信息

通过 try catch 代码块可以捕捉异常,这样异常的代码就 不会影响 后续代码的执行。

此时通过 print 打印异常,只能得到如下所示的异常信息:那该如何查看异常时的函数调用栈信息呢?


其实 catch 代码块除了异常对象,还可以通过第二参回调函数调用栈信息:

此时通过打印,就可以得到如下的信息:

可以使用调试来查看一下这个 stack 的运行时类型。如下所示,类型为 _StackTrace :


3. 如何捕捉任意位置调用栈信息

除了异常捕捉外,有办法在任意代码位置,获得当前函数调用栈信息吗?比如记录一些日志时,一个事件的触发点可能有很多地方,如果能知道当前的调用栈信息,那么对问题的排查将大有裨益。

通过 StackTrace.current 可以获取当前代码位置的调用栈信息

可能有些朋友看到下面的内容就会有一些不悦,毕竟它一般代表着代码出现异常了。不过注意此时,这个函数调用栈信息不是异常抛出的,而是我们主动获取 的。

另外,仔细观察一下这个调用栈信息,我们似乎可以从中一步步看到点击事件在源码中时如何实现的。信息就是有价值的,不要惧怕信息,要从中汲取到对我们有帮助的内容,它的存在是帮助我们解决问题。


尾声

本文介绍了一个非常小的知识点,但它的价值是非常大的。函数调用栈信息,可以帮我们快速定位问题所在,也能反应出一个函数被调用的全过程,也利于源码分析。那么本文就到这里,更多 Flutter 知识集锦内容,敬请期待 ~

更多文章和视频知识资讯,大家可以关注我的公众号、掘金和 B 站 。

相关推荐
FungLeo6 小时前
Flutter fl_chart 0.70 破坏性 API 迁移实录:duration/getTooltipColor/withValues 全解
flutter·fl_chart
一笑的小酒馆6 小时前
Android中WebRTC通信
android
KevinWang_9 小时前
Android Hilt 依赖注入
android
古法安卓9 小时前
Android-深入理解 Android 回调(Callback)机制
android·性能优化·android studio
古法安卓9 小时前
Android-车机 GNSS 定位数据接收问题排查
android·java·android studio
FungLeo12 小时前
Flutter 吸顶分组列表实战:语义桶分组 + 点击头平滑滚动
android·flutter
阿巴斯甜12 小时前
Android 自定义权限
android
FungLeo13 小时前
Flutter 超长 StatefulWidget 拆分术:part of + extension on State 实战
android·flutter·dart
小王C语言14 小时前
MySQL 数据类型:数值类型、字符串类型、日期和时间类型、enum 和 set、find_in_set 查询
android·数据库·mysql
我命由我1234514 小时前
Android 控件 - CardView(快速实现圆角)
android·java·java-ee·kotlin·android studio·android-studio·android runtime