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

1. 异常时的调用栈信息

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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


尾声

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

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

相关推荐
用户2018792831671 小时前
通俗故事:驱动二进制文件在AOSP中的角色
android
穷人小水滴1 小时前
在 Termux 中签名 apk 文件
android·linux·apk
用户2018792831671 小时前
android王国的 “城堡攻防战”
android
还是一只小牛1 小时前
探秘 React Native:线程探索及桥优化
android·前端
DoubleYellowIce1 小时前
一个简单的跨进程通信SDK
android
用户2018792831671 小时前
故事:从出厂镜像中“挖矿”驱动二进制
android
网络点点滴2 小时前
上传一个菜谱-最后部分(项目完结)
android·okhttp
农业工作者2 小时前
Android:使用OkHttp
android·okhttp
翱翔-蓝天2 小时前
安卓开发常用框架与库详解
android
毒果2 小时前
低成本同屏方案:电脑 + 路由器实现 50 台安卓平板实时同屏
android·电脑·同屏技术