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

1. 异常时的调用栈信息

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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


尾声

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

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

相关推荐
矛取矛求7 小时前
苹果与安卓,鸿蒙下跨设备,应用分享
android·华为·harmonyos
taokexia8 小时前
Flutter使用自签证书打包ipa
flutter
QING6189 小时前
Android 动态权限——添加拦截器
android·kotlin·app
QING6189 小时前
Kotlin 委托与扩展函数——新手入门
android·kotlin·app
QING6189 小时前
Android 动态权限封装——新手入门使用指南
android·kotlin·app
tangweiguo0305198710 小时前
Android Kotlin 中使用 MPAndroidChart 绘制优雅的曲线图:封装与优化实践
android·kotlin
闲倚一枝藤10 小时前
海思烧录工具HITool电视盒子刷机详解
android·电视盒子·智能电视·电视机·tv
氦客11 小时前
kotlin知识体系(四) : inline、noinline、crossinline 关键字对应编译后的代码是怎样的 ?
android·开发语言·kotlin·inline·noinline·crossinline·编译后的代码
89315196012 小时前
Android开发BasePagerAdapter
android·android开发·viewpager·android教程·viewpageradapte
江上清风山间明月12 小时前
一周掌握Flutter开发--8. 调试与性能优化(上)
flutter·性能优化