阅读 88

Meta 开源 Android Java 的静态死锁检测器

  Meta (原 FaceBook)开发了一种新的静态分析器,它可以在 Android 的 Java 代码中捕获死锁,而无需运行代码。该死锁检测器是开源的 Infer 静态分析框架的一部分。

  据工程师 Nikos Gorogiannis 介绍,新的死锁检测器能够分析具有数亿行代码的代码库的修订,目前已经在 Meta 的持续集成系统中部署,它会扫描对 Android 应用程序系列的每个提交。在过去两年中,Meta 开发人员针对它的死锁报告采取了 200 多项修复措施,修复率约为 54%。

  该检测器如何运作?

  该分析器使用抽象解释技术来设计。对于每个方法,分析器都会计算方法在获取和释放锁方面的行为摘要,以及该方法是在主线程还是在后台线程上运行。然后使用一个关键对 (A,B) 记录了以下事实:该方法试图获取锁 B,而此时,它已经精确地持有集合 A 中的锁。以上数据通过所有方法的计算得出,足以让判断两个并发方法之间是否可能出现死锁问题。

  为了快速高效,该工具还避免分析应用程序中的所有源文件。相反,它首先处理已修改文件的所有方法。然后基于该数据应用启发式方法,来定位修改文件之外的方法,这些方法可能与修改版本中的一种方法发生死锁。

  死锁通常是不可恢复的错误,也是非常难以诊断的错误,因为线程调度本质上是不确定的。因此,死锁的测试可能需要运行数千或数百万次才能显示问题,那么无需运行甚至构建代码即可静态地检测死锁就非常有价值。

  Nikos Gorogiannis 称其团队的方法已实现了死锁分析这一目标,同时也使其具有足够的可扩展性,可以在大型代码库上部署分析器。

  相关链接:

  • 论文:https://discovery.ucl.ac.uk/id/eprint/10140070/1/deadlocks_final.pdf

  • 公告博客:https://engineering.fb.com/2022/03/08/android/deadlock-detector-for-android-java/

来自: 开源中国社区



文章分类
百科问答
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐