Akindone's Studio.

Observatory帮我找到循环调用的真凶

字数统计: 378阅读时长: 1 min
2018/11/11 Share

引子

最近在自测flutter项目中的一个模块,运行到某个页面的某个功能时会突然卡住,log也没有任何的报错信息,应用的进程也没有被杀死,说明不是遇到异常。我先后用了print日志,加断点debug去寻找是哪里出现了问题,但都没有收获。我猜测可能是遇到循环调用,导致卡死了。刚好最近在学习Observatory,觉得应该能从函数的调用情况中发现什么。

Debug思路

Observatory是dart应用的性能优化工具,它能获取应用内存分配,CPU资源分配。既然怀疑是循环调用,那么肯定有某个函数出现了爆炸式的调用,那我们可以去CPU Profile面板看看。关于这个工具的使用,可以看我之前写的这篇文章

卡死前的CPU Profile:排在前面的基本上不是我们项目中的dart函数
normal
卡死后的CPU Profile:蓝色的是我们项目中的函数,点击可查看调用栈和来源比例
abnormal

我对比了一下进入出问题的模块前后的CPU Profile,在页面出现卡死后,确实有一些函数被大量的调用,我们可以点击蓝色的函数,看到它的调用栈。在获取明确的调用栈后,我很快找到了引发循环调用的根源。

总结

感谢Observatory帮我找到循环调用的真凶。

CATALOG
  1. 1. 引子
  2. 2. Debug思路
  3. 3. 总结