使用 Xcode 工具更快的發(fā)現 Bug

我們可以使用 Xcode 自帶的 運行時工具發(fā)現代碼中的漏洞蕾久,有些難以復現的 Bug 往往使用這些工具很容易定位到,比如線程引發(fā)的資源競爭問題,內存問題等杯拐。

Diagnostics.png

【1】Main thread checker【Xcode 新增特性】

當某些代碼必須在主線程執(zhí)行時顶滩,而你沒有在主線程執(zhí)行,那么 Xcode9 會提示仅醇。XXX must be used from thread only.。這個工具 Xcode9 是默認打開的,建議開啟蛤吓。

【2】Address Sanitizer

發(fā)生內存異常時可以使用這個工具調試锅棕,比如 buffer overflow, use-after-free, double free, use after end of scope。

【3】Thread Sanitizer

定位多線程問題,比如數據爭用(Data race),想要打開這個開關,需要關閉 Address Sanitizer 钞啸,Malloc Stack 和 Memory Management 選項颖低。下面這段代碼會出現資源競爭的問題。勾選后,將會提示:

Race on a library object in -[ViewController testThreadRace] at 0x7b080000db20
Race on a library object in -[ViewController testThreadRace] at 0x7b080000db20

for (int i = 0; i < 10; i++) {
   dispatch_async(dispatch_get_global_queue(0, 0), ^{
      [self testThreadRace];
   });
}

- (void)testThreadRace
{
    BOOL found = [_dict objectForKey:@"lefe"];
    if (found) {
        NSLog(@"Found");
    }
    [_dict setObject:@"WangSuyan" forKey:@"lefe"];
}
data-race.png

【4】Undefined Behavior Sanitizer 【Xcode 新增特性】

檢測未定義的行為食店,這些多數服務與 C 語言价认,因為 OC 和 Swift 相對比較安全渠退,在語言設計時就消除了大多數未定義的行為【圖 4-1】惠奸。它可以檢測到大約 15 種未定義的行為,比如常見的有數組越界梗掰,未初始化埂陆,無效的枚舉值焚虱,除數為零和空值判斷等谍咆。我們用例子來列舉幾個未定義的行為(想了解更多看官方文檔 https://developer.apple.com/documentation/code_diagnostics/undefined_behavior_sanitizer):

- (NSInteger)testUndefinedBehavior
{
    NSInteger value;
    if (self.name.length > 0) {
        value = 12;
    }
    return value;
}

如果勾選 Undefined Behavior Sanitizer 這樣選項供嚎,Xcode 會提示

Variable 'value' is used uninitialized whenever 'if' condition is false
array.png
swift_c.png

推薦閱讀

【iOS 國際化】如何把國際化時需要3天的工作量縮減到10分鐘
Promise
微信iOS數據庫是什么樣的

===== 我是有底線的 ======
喜歡我的文章着帽,歡迎關注我的新浪微博 Lefe_x,我會不定期的分享一些開發(fā)技巧

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市尼变,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖院领,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件强法,死亡現場離奇詭異课竣,居然都是意外死亡,警方通過查閱死者的電腦和手機靶橱,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凡伊,“玉大人诵盼,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵柠贤,是天一觀的道長宴霸。 經常有香客問我,道長论笔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任管嬉,我火速辦了婚禮,結果婚禮上忆家,老公的妹妹穿的比我還像新娘卸例。我一直安慰自己姑原,他們只是感情好腺兴,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著连舍,像睡著了一般没陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上索赏,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天盼玄,我揣著相機與錄音,去河邊找鬼潜腻。 笑死埃儿,一個胖子當著我的面吹牛,可吹牛的內容都是我干的融涣。 我是一名探鬼主播童番,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼威鹿!你這毒婦竟也來了妓盲?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤专普,失蹤者是張志新(化名)和其女友劉穎悯衬,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡筋粗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年策橘,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜亿。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丽已,死狀恐怖,靈堂內的尸體忽然破棺而出买决,到底是詐尸還是另有隱情沛婴,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布督赤,位于F島的核電站嘁灯,受9級特大地震影響,放射性物質發(fā)生泄漏躲舌。R本人自食惡果不足惜丑婿,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望没卸。 院中可真熱鬧羹奉,春花似錦、人聲如沸约计。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤蚌。三九已至耕挨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铺然,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工酒甸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魄健,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓插勤,卻偏偏與公主長得像沽瘦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子农尖,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容