Google發(fā)布新的ThreadSanitizer數(shù)據(jù)競速檢測工具

2019-12-23 10:20:21    來源:    作者:

Google最新的ThreadSanitizer工具已更新至版本2,為使用該工具已有五年歷史的工具提供了改進(jìn)功能,可幫助開發(fā)人員在比過去更少的時間內(nèi)發(fā)現(xiàn)更多編碼問題。谷歌軟件工程師亞歷山大·波塔彭科(Alexander Potapenko)在4月21日發(fā)表于The Chromium Blog上的文章中寫道,ThreadSanitizer(又名TSan)是一種基于二進(jìn)制翻譯的運行時數(shù)據(jù)競賽檢測器,它最初由Google工程師于2009年開發(fā)。“該工具幫助發(fā)現(xiàn)了多個項目中的數(shù)千個線程錯誤,包括Chromium中的將近180個錯誤。2010年,我們開始嘗試使用基于編譯器的工具而不是二進(jìn)制翻譯,并且一旦方法證明了自己,我們的團隊便從頭開始重新設(shè)計ThreadSanitizer。 ,專注于編譯時檢測,以提高速度和準(zhǔn)確性。”

他寫道,現(xiàn)在團隊進(jìn)一步推動了ThreadSanitizer v2的開發(fā)?,F(xiàn)在,該工具已成為LLVM和GCC的一部分,“能夠檢測C ++和Go代碼中的數(shù)據(jù)競爭,但它還能夠報告同步問題,例如死鎖,未連接的線程,銷毀鎖定的互斥體,使用異步信號不安全代碼在信號處理程序等中。”

改進(jìn)的ThreadSanitizer v2“可以識別原子操作,因此它可以生成更準(zhǔn)確的報告,還可以找到無鎖算法中的錯誤,否則很難檢測到,” Potapenko寫道。“例如,它幫助我們在LazyInstance中找到不正確的同步,錯誤的無鎖隊列實現(xiàn)以及V8中的并發(fā)掃描問題。”

ThreadSanitizer v2的速度比舊的ThreadSanitizer快20倍,“因此可以將其用于重量級的瀏覽器測試。”我們發(fā)現(xiàn)在代碼中幾個錯誤是不是由更小的單元測試覆蓋了,就像比賽 的WebKit的字符串,垃圾收集在閃爍,一個釋放后使用免費眨眼,在報告的WebRTC少數(shù)還有很多。這也提高了錯誤的可重復(fù)性:重復(fù)測試的次數(shù)越多,重現(xiàn)片狀錯誤的機會就越大。”

他寫道,在過去的六個月中,新工具檢測到了近100個錯誤。Potapenko寫道:“我們未來的計劃包括在ClusterFuzz上廣泛使用TSan,并為各種Chromium子項目添加定期測試,以快速捕獲新的回歸。”

他寫道,開發(fā)人員可以在ThreadSanitizer頁面上找到有關(guān)使用改進(jìn)工具的更多信息。“該工具易于使用,可以與任何構(gòu)建系統(tǒng)集成:只需添加一個編譯時標(biāo)記并運行程序即可查看錯誤報告。對于Chromium開發(fā)人員,在dev.chromium.org上有一個特殊的頁面,其中包含說明”。

Google一直在為產(chǎn)品開發(fā)者開發(fā)新的和改進(jìn)的工具。

2013年12月,Google 添加了新的Chrome工具,包括擴展的仿真和屏幕廣播功能以及新的調(diào)試工具,以幫助開發(fā)人員更快地測試和調(diào)試其移動應(yīng)用。這些工具使應(yīng)用程序開發(fā)人員可以在編寫代碼時看到他們的代碼如何在移動設(shè)備上顯示,從而幫助他們創(chuàng)建更好的代碼和應(yīng)用程??序。

Chrome的新開發(fā)者工具更新是在2013年8月又增加了三輪新工具之后進(jìn)行的更新。這些工具包括Workspaces,它使開發(fā)人員可以在DevTools中實時編輯具有雙向磁盤持久性的源文件;CSS預(yù)處理器映射;和代碼段,使開發(fā)人員可以創(chuàng)建,編輯,保存和執(zhí)行自定義JavaScript代碼段。

2013年7月,Google發(fā)布了Beta版的新Dart軟件開發(fā)套件和編輯器,以幫助開發(fā)人員更快地創(chuàng)建其代碼。該公司還開始嘗試一種稱為QUIC(快速UDP Internet連接)的新網(wǎng)絡(luò)協(xié)議,該協(xié)議可以在將來加快網(wǎng)絡(luò)連接的速度。

新的Dart SDK和編輯器在其第一個Beta版本中,其性能和生產(chǎn)率得到了提高,旨在幫助開發(fā)人員自動化其代碼創(chuàng)建,生成較小的JavaScript代碼以及部署Dart Web應(yīng)用程序。

2013年6月,Google推出了一個新的Cloud Playground環(huán)境,開發(fā)人員可以根據(jù)需要快速嘗試想法,而不必致力于建立一個本地開發(fā)環(huán)境,該環(huán)境可以安全地在生產(chǎn)基礎(chǔ)架構(gòu)之外測試編碼實驗。目前,新的Cloud Playground僅限于支持Python 2.7 App Engine應(yīng)用程序。

同樣在2013年6月,Google 向開發(fā)人員開放了Google Maps Engine API,以便他們可以構(gòu)建包含Google Maps功能和靈活性的消費者和業(yè)務(wù)應(yīng)用程序。通過使用Maps API,開發(fā)人員現(xiàn)在可以使用Google的云基礎(chǔ)架構(gòu)將其數(shù)據(jù)添加到Google Map之上,并與消費者,員工或其他用戶共享該自定義混搭。然后,地圖可以由公司或組織內(nèi)部共享,也可以在Web上發(fā)布。

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。