WWDC 2016 Thread Santizer and Static Analysis

一. Thread Santizer(TSAN) 線程競態(tài)檢測工具:可以在運行時發(fā)現(xiàn)線程競態(tài)


競態(tài)

兩個線程同時訪問同一個變量卫枝,而且其中至少一個線程要做的是寫操作,這種情況就叫競態(tài)慨丐。

使用場景

開發(fā)的App中存在的不能穩(wěn)定重現(xiàn)的bug诫肠。

原因

這種bug通常是由多個線程訪問同一塊內存造成的。(俗稱:線程沖突問題)

Demo

https://github.com/PigRiver/ThreadSantizerDemo

使用方法

target=》Edit Scheme卢佣。在Diagnostics tab下勾選Thread Sanitizer重荠。(可以選擇 Pause on issues)

具體內容

http://www.reibang.com/p/358535119e9b

使用Command-Line代碼:

clang -fsanitize=thread source.c -o executable

xcodebuild -enableThreadSanitizer YES

TSAN_OPTIONS=halt_on_error=1 ./executable

注意:

1. 在 WWDC 演講中,蘋果推薦在所有的單元測試里都打開 thread sanitizer虚茶。Sanitizer 只在運行時有效晚缩,而且必須要代碼運行到那兒才能檢測出線程競態(tài)。如果你的代碼單元測試覆蓋率很高媳危,那么 Thread Sanitizer 能找出工程里絕大部分的線程競態(tài)荞彼。

2. Tsan只會幫你在重現(xiàn)問題時精準地找到問題所在,而不會幫你重現(xiàn)問題待笑。

3. 只支持64位的測試機調試鸣皂。不支持真機。


原理:


圖1

圖1表明,Tsan是在生成exec時才綁定到程序中寞缝,所以:通用clang編繹的語言癌压,都可以使用Tsan來定位線程沖突問題。



圖2

當進行每一個內存訪問時荆陆,都通過check滩届、code對線程進行標記,記錄讀數(shù)據的時間被啼。

在Shadow State中記錄thread對數(shù)據的寫操作帜消。

每次thread寫操作時,對比線程讀數(shù)據的時間與Shadow State最近一次的寫操作的時間浓体。


二. Static Analysis:一個常見的 debug 的工具

Static Analyzer 能夠檢測出三種新的錯誤, 它們分別是:

Localizability

?本地化信息缺失的問題,目前能夠檢測出來兩種類型的錯誤, 一種是沒有使用 NSLocalizeString 這樣的 API, 而直接給控件設置 Sting 的情況, 一種是使用了相應的 API, 但在 comment 信息里面賦值為 nil.

Instance Cleanup

在 MRC 的代碼中, 尤其在 dealloc 中,我們不應該對 assign 類型的屬性進行 release 操作,應該對 retain 或者 copy 類型的屬性進行 release 操作, 如果不這樣操作的話,會引發(fā)一些不必要的麻煩.

Nullability

2015 年的 WWDC 大會上, Objective-C 引入的一個新特性就叫做 Nullability, 用于表明一個東西到底可以為 nil 還是不可以為 nil .


一般什么時候會出現(xiàn) nullability 方面的錯誤呢?

Objective-C 與 Swift 混編的場景

在代碼中有一些邏輯錯誤

不正確的注釋


為什么我們需要使用與 nullability 相關的關鍵字?

便于跟 Swift 的交互

方便使用者明白開發(fā)者的意圖

能夠將一些不必要的問題提前到編碼階段, 而不是到用戶使用時才暴露泡挺。


三. 總結:

1. 我們可以通過Tsan來協(xié)助修復線程競態(tài)問題。

2. Tsan的實現(xiàn)原理命浴。

3. Static Analysis支持分析更多的問題娄猫。


參考:

http://www.reibang.com/p/074072c33916

http://www.reibang.com/p/358535119e9b

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市生闲,隨后出現(xiàn)的幾起案子媳溺,更是在濱河造成了極大的恐慌,老刑警劉巖碍讯,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬蔽,死亡現(xiàn)場離奇詭異,居然都是意外死亡冲茸,警方通過查閱死者的電腦和手機屯阀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轴术,“玉大人难衰,你說我怎么就攤上這事《涸裕” “怎么了盖袭?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長彼宠。 經常有香客問我鳄虱,道長,這世上最難降的妖魔是什么凭峡? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任拙已,我火速辦了婚禮,結果婚禮上摧冀,老公的妹妹穿的比我還像新娘倍踪。我一直安慰自己系宫,他們只是感情好,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布建车。 她就那樣靜靜地躺著扩借,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缤至。 梳的紋絲不亂的頭發(fā)上潮罪,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音领斥,去河邊找鬼嫉到。 笑死,一個胖子當著我的面吹牛戒突,可吹牛的內容都是我干的屯碴。 我是一名探鬼主播描睦,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼膊存,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忱叭?” 一聲冷哼從身側響起隔崎,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎韵丑,沒想到半個月后爵卒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡撵彻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年钓株,在試婚紗的時候發(fā)現(xiàn)自己被綠了陌僵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片效五。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出巫橄,到底是詐尸還是另有隱情剖淀,我是刑警寧澤俺驶,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布巡雨,位于F島的核電站闰渔,受9級特大地震影響,放射性物質發(fā)生泄漏冈涧。R本人自食惡果不足惜向挖,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一炕舵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咽筋,春花似錦溶推、人聲如沸奸攻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辐赞。三九已至硝训,卻和暖如春响委,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窖梁。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工赘风, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纵刘。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓邀窃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親假哎。 傳聞我的和親對象是個殘疾皇子瞬捕,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容

  • 本文主要講了java中多線程的使用方法、線程同步舵抹、線程數(shù)據傳遞肪虎、線程狀態(tài)及相應的一些線程函數(shù)用法、概述等掏父。 首先講...
    李欣陽閱讀 2,459評論 1 15
  • 寫在前面的話: 這篇博客是我從這里“轉載”的笋轨,為什么轉載兩個字加“”呢?因為這絕不是簡單的復制粘貼赊淑,我花了五六個小...
    SmartSean閱讀 4,743評論 12 45
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,322評論 25 707
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,720評論 0 4
  • 文/圖 林夭 有人抱怨這個社會太浮躁爵政,何不說,浮躁的只是人心罷了陶缺。在快節(jié)奏的生活里過久了钾挟,反而對“慢”心生煩躁”グ叮總...
    林夭閱讀 775評論 13 6