Meta 開源 Android Java 的靜態(tài)死鎖檢測器

發(fā)布時間:2022-03-11 11:21:28  |  來源:騰訊網(wǎng)  

出品|開源中國

文|羅奇奇

Meta (原 FaceBook)開發(fā)了一種新的靜態(tài)分析器,它可以在 Android 的 Java 代碼中捕獲死鎖,而無需運行代碼。該死鎖檢測器是開源的Infer 靜態(tài)分析框架的一部分。

據(jù)工程師 Nikos Gorogiannis 介紹,新的死鎖檢測器能夠分析具有數(shù)億行代碼的代碼庫的修訂,目前已經(jīng)在 Meta 的持續(xù)集成系統(tǒng)中部署,它會掃描對 Android 應用程序系列的每個提交。在過去兩年中,Meta 開發(fā)人員針對它的死鎖報告采取了 200 多項修復措施,修復率約為 54%。

該檢測器如何運作?

該分析器使用抽象解釋技術來設計。對于每個方法,分析器都會計算方法在獲取和釋放鎖方面的行為摘要,以及該方法是在主線程還是在后臺線程上運行。然后使用一個關鍵對 (A,B) 記錄了以下事實:該方法試圖獲取鎖 B,而此時,它已經(jīng)精確地持有集合 A 中的鎖。以上數(shù)據(jù)通過所有方法的計算得出,足以讓判斷兩個并發(fā)方法之間是否可能出現(xiàn)死鎖問題。

為了快速高效,該工具還避免分析應用程序中的所有源文件。相反,它首先處理已修改文件的所有方法。然后基于該數(shù)據(jù)應用啟發(fā)式方法,來定位修改文件之外的方法,這些方法可能與修改版本中的一種方法發(fā)生死鎖。

死鎖通常是不可恢復的錯誤,也是非常難以診斷的錯誤,因為線程調(diào)度本質(zhì)上是不確定的。因此,死鎖的測試可能需要運行數(shù)千或數(shù)百萬次才能顯示問題,那么無需運行甚至構建代碼即可靜態(tài)地檢測死鎖就非常有價值。

Nikos Gorogiannis 稱其團隊的方法已實現(xiàn)了死鎖分析這一目標,同時也使其具有足夠的可擴展性,可以在大型代碼庫上部署分析器。

關鍵詞: Meta Android Java 的靜態(tài)死鎖檢測器

 

網(wǎng)站介紹  |  版權說明  |  聯(lián)系我們  |  網(wǎng)站地圖 

星際派備案號:京ICP備2022016840號-16 營業(yè)執(zhí)照公示信息版權所有 郵箱聯(lián)系:920 891 263@qq.com