Meta 開(kāi)源 Android Java 的靜態(tài)死鎖檢測(cè)器
Meta (原 FaceBook)開(kāi)發(fā)了一種新的靜態(tài)分析器,它可以在 Android 的 Java 代碼中捕獲死鎖,而無(wú)需運(yùn)行代碼。該死鎖檢測(cè)器是開(kāi)源的 Infer 靜態(tài)分析框架的一部分。
據(jù)工程師 Nikos Gorogiannis 介紹,新的死鎖檢測(cè)器能夠分析具有數(shù)億行代碼的代碼庫(kù)的修訂,目前已經(jīng)在 Meta 的持續(xù)集成系統(tǒng)中部署,它會(huì)掃描對(duì) Android 應(yīng)用程序系列的每個(gè)提交。在過(guò)去兩年中,Meta 開(kāi)發(fā)人員針對(duì)它的死鎖報(bào)告采取了 200 多項(xiàng)修復(fù)措施,修復(fù)率約為 54%。
該檢測(cè)器如何運(yùn)作?
該分析器使用抽象解釋技術(shù)來(lái)設(shè)計(jì)。對(duì)于每個(gè)方法,分析器都會(huì)計(jì)算方法在獲取和釋放鎖方面的行為摘要,以及該方法是在主線程還是在后臺(tái)線程上運(yùn)行。然后使用一個(gè)關(guān)鍵對(duì) (A,B) 記錄了以下事實(shí):該方法試圖獲取鎖 B,而此時(shí),它已經(jīng)精確地持有集合 A 中的鎖。以上數(shù)據(jù)通過(guò)所有方法的計(jì)算得出,足以讓判斷兩個(gè)并發(fā)方法之間是否可能出現(xiàn)死鎖問(wèn)題。

為了快速高效,該工具還避免分析應(yīng)用程序中的所有源文件。相反,它首先處理已修改文件的所有方法。然后基于該數(shù)據(jù)應(yīng)用啟發(fā)式方法,來(lái)定位修改文件之外的方法,這些方法可能與修改版本中的一種方法發(fā)生死鎖。
死鎖通常是不可恢復(fù)的錯(cuò)誤,也是非常難以診斷的錯(cuò)誤,因?yàn)榫€程調(diào)度本質(zhì)上是不確定的。因此,死鎖的測(cè)試可能需要運(yùn)行數(shù)千或數(shù)百萬(wàn)次才能顯示問(wèn)題,那么無(wú)需運(yùn)行甚至構(gòu)建代碼即可靜態(tài)地檢測(cè)死鎖就非常有價(jià)值。
Nikos Gorogiannis 稱其團(tuán)隊(duì)的方法已實(shí)現(xiàn)了死鎖分析這一目標(biāo),同時(shí)也使其具有足夠的可擴(kuò)展性,可以在大型代碼庫(kù)上部署分析器。
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:Meta 開(kāi)源 Android Java 的靜態(tài)死鎖檢測(cè)器
本文地址:https://www.oschina.net/news/185948/deadlock-detector-for-android-java















 
 
 









 
 
 
 