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

2019-12-23 10:20:21    來(lái)源:    作者:

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

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

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

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

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

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

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

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

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

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

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

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

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

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