iOS斷點調試

1.斷點調試App

a.設置常規(guī)斷點

添加斷點:在xcode中代碼編輯器中右邊單擊你想調試的代碼處就可以添加斷點,再次單擊可以停用斷點,添加斷點后右鍵點擊斷點可以刪除斷點或者快捷鍵(command+\)。

b.編輯斷點

條件斷點在斷點上按住ctrl再鼠標單擊或者右鍵單擊茶宵,可以彈出編輯斷點菜單须肆,在這里我們可以為斷點設置特殊條件尝胆。

下面我們?yōu)檫@段代碼添加斷點并添加如下條件:

)

上面的意思就是只有當i==10的時候斷點才會觸發(fā)键袱。還有一個地方是當我們勾選Automatically continue after evaluating actions之后程序進入斷點不會中斷執(zhí)行鹉动,只會執(zhí)行我們的action,如果不勾選程序則會和普通斷點一樣爪喘,暫停程序颜曾,等待用戶命令。

這里面的action有非常多鐘選擇

可以執(zhí)行AppleScipt(蘋果自己的腳本語言)秉剑,還有capture GPU Frame這個功能現在基本沒撒用了泛豪,最新的調試gpu都采用instruments來調試了,主要常用是打印日志或者播放一段聲音侦鹏,或者執(zhí)行一段shell腳本诡曙。

c.單步執(zhí)行,斷點管理

斷點執(zhí)行面板下面來認識一下調試斷點的界面略水,當程序執(zhí)行到一個斷點的時候价卤,會在xcode下方出現如下面板。

上面四個紅色框中的按鈕分別表示渊涝,1.繼續(xù)執(zhí)行 2.單步執(zhí)行(依次執(zhí)行下一行代碼) 3.進入函數(當前代碼是調用其他方法會進入到該方法) 4.跳出函數

藍色標簽點擊后可以停用所有斷點慎璧。

斷點管理面板

在xcode左側面板第7個tab下是斷點管理面板(command+7),在這里可以管理整個項目中的斷點跨释。這里可以清空所有斷點胸私,或著停用某些斷點。在這里點擊斷點右鍵可以看到又個share BreakPoint選項煤傍,選擇該選項后該斷點會出現在shared下方盖文,這樣這個斷點會被分享給團隊內的所有成員。

d.異常斷點蚯姆,符號斷點(hold住全局異常,快速定位出錯代碼行)

在其他語言或者程序中當程序出現崩潰五续,一般來說調試器會告訴開發(fā)中那一行代碼拋出了異常,但是在ios中會直接報錯跳到程序入口main函數中return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));這讓我們調試起來很痛苦龄恋,但是我們只需要在斷點管理面板的下方添加全局斷點handle所有Exception這樣當有代碼拋出異常崩潰的時候疙驾,xcode就會自動跳到相應代碼行。

添加成功后就會處理所有的Exception

你也可以添加Symbolic Breakpoint這種斷點允許你配置catch指定異常情況郭毕。

2.lldb調試器

LLDB 是一個有著REPL的特性和 C++ ,Python 插件的開源調試器它碎。LLDB 綁定在 Xcode 內部,存在于主窗口底部的控制臺中显押。http://lldb.llvm.org/lldb-gdb.html 這里是一份lldb命令清單扳肛,列出了lldb可用的命令。

c.打印對象(po)

使用po(print out)命令可用輸出對象信息:

a.打印最基本的內容 (p)

使用p(print)可用輸出對象并且為對象該對象會保存在lldb中的一個變量中

這里所有$美元符號后面的變量都是lldb中的乘碑。

接下來我們可以使用這個變量進行計算

我們可以看到p(print)命令和e(expression)命令貌似差不多挖息,可以使用help p查看到p命令其實是對expression命令的一個縮寫包裝'p' is an abbreviation for 'expression --'

現在我們可以在lldb中獲取變量的值以及計算表達式的結果了。但是經常我們的需求是兽肤,在斷點中發(fā)現某些變量期待的值和我們想象的不一樣套腹,這時候我們要修改這個值怎么辦绪抛?

d.修改運行時變量值

這當然也是一件很簡單的事情,像下面這樣电禀,我們使用p命令給frame.size.height 賦值到$23 然后直接修改$23的值即可

需要注意的是修改了內存中的值需要執(zhí)行下一步才會在程序中體現出來幢码。最簡單就是在lldb中再輸入n。

e.lldb控制斷點流程

在lldb中有幾個簡單的命令用來控制斷點流程尖飞,方便調試無需點擊xcode上的控制流程了症副。

上圖上的控制按鈕分別對應lldb中的c(continue),n(thread step-over,next),s(thread step in葫松,step),finish(thread step-out)

就是c瓦糕,n,s腋么,finish。

frame info:列出當前所在文件以及當前所在代碼行

列出斷點:br li(break point list)

添加斷點:br set(br set -f HomeContactViewController.m -l 122)

刪除斷點:br del

caflush:更新界面

lldb模擬函數返回值

當我們發(fā)現一個函數我們不想執(zhí)行亥揖,只需要得到它的結果的時候珊擂,我們可以用lldb來完成這一件事。

在我們進入一個函數中后费变,我們可以使用 thread return [value]來直接返回該函數的值而不用執(zhí)行摧扇。

3.利用facebook開源組件chisel增強llvm調試功能

chisel是facebook編寫的一套擴展lldb命令的工具,下面是它的主頁

https://github.com/facebook/chisel

推薦幾個我常用的調試相關的軟件和插件:

網絡相關:charles chrome插件postman

xcode插件:

Go to sandbox(快速定位到模擬器沙盒)
MCLog(過濾調試日志信息)

參考資料:

http://www.peterfriese.de/debugging-tips-for-ios-developers/

http://www.cnblogs.com/stoic/archive/2012/07/10/2584967.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末挚歧,一起剝皮案震驚了整個濱河市扛稽,隨后出現的幾起案子,更是在濱河造成了極大的恐慌滑负,老刑警劉巖在张,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異矮慕,居然都是意外死亡帮匾,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進店門痴鳄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘟斜,“玉大人,你說我怎么就攤上這事痪寻÷菥洌” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵橡类,是天一觀的道長蛇尚。 經常有香客問我,道長猫态,這世上最難降的妖魔是什么佣蓉? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任披摄,我火速辦了婚禮,結果婚禮上勇凭,老公的妹妹穿的比我還像新娘疚膊。我一直安慰自己,他們只是感情好虾标,可當我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布寓盗。 她就那樣靜靜地躺著,像睡著了一般璧函。 火紅的嫁衣襯著肌膚如雪傀蚌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天蘸吓,我揣著相機與錄音善炫,去河邊找鬼。 笑死库继,一個胖子當著我的面吹牛箩艺,可吹牛的內容都是我干的。 我是一名探鬼主播宪萄,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼艺谆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拜英?” 一聲冷哼從身側響起静汤,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎居凶,沒想到半個月后虫给,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡排监,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年狰右,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舆床。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡棋蚌,死狀恐怖,靈堂內的尸體忽然破棺而出挨队,到底是詐尸還是另有隱情谷暮,我是刑警寧澤,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布盛垦,位于F島的核電站湿弦,受9級特大地震影響,放射性物質發(fā)生泄漏腾夯。R本人自食惡果不足惜颊埃,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一蔬充、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧班利,春花似錦饥漫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闯割,卻和暖如春彻消,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宙拉。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工宾尚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鼓黔。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓央勒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親澳化。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,995評論 2 361

推薦閱讀更多精彩內容

  • 轉載 與調試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,334評論 0 10
  • 你是否曾經苦惱于理解你的代碼稳吮,而去嘗試打印一個變量的值缎谷? NSLog(@"%@", whatIsInsideThi...
    木易林1閱讀 957評論 0 4
  • [轉]淺談LLDB調試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,521評論 2 6
  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值灶似? NSLog(@"%@", whatIsInsideThi...
    paraneaeee閱讀 1,196評論 0 7
  • 與調試器共舞 - LLDB 的華爾茲 nangege 2014/12/19 你是否曾經苦惱于理解你的代碼列林,而去嘗試...
    McDan閱讀 883評論 0 0