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

1. 异常时的调用栈信息

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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


尾声

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

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

相关推荐
花花鱼5 小时前
android studio 设置让开发更加的方便,比如可以查看变量的类型,参数的名称等等
android·ide·android studio
alexhilton7 小时前
为什么你的App总是忘记所有事情
android·kotlin·android jetpack
小蜜蜂嗡嗡10 小时前
flutter封装vlcplayer的控制器
前端·javascript·flutter
AirDroid_cn10 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
尊治10 小时前
手机电工仿真软件更新了
android
xiangzhihong813 小时前
使用Universal Links与Android App Links实现网页无缝跳转至应用
android·ios
车载应用猿14 小时前
基于Android14的CarService 启动流程分析
android
没有了遇见14 小时前
Android 渐变色实现总结
android
雨白17 小时前
Jetpack系列(四):精通WorkManager,让后台任务不再失控
android·android jetpack
mmoyula19 小时前
【RK3568 驱动开发:实现一个最基础的网络设备】
android·linux·驱动开发