iOS斷點調試

1.斷點調試App

a.設置常規斷點

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

b.編輯斷點

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

下面我們為這段代碼添加斷點并添加如下條件:

)

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

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

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

c.單步執行,斷點管理

斷點執行面板下面來認識一下調試斷點的界面,當程序執行到一個斷點的時候,會在xcode下方出現如下面板。

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

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

斷點管理面板

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

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

在其他語言或者程序中當程序出現崩潰,一般來說調試器會告訴開發中那一行代碼拋出了異常,但是在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中獲取變量的值以及計算表達式的結果了。但是經常我們的需求是,在斷點中發現某些變量期待的值和我們想象的不一樣,這時候我們要修改這個值怎么辦?

d.修改運行時變量值

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

需要注意的是修改了內存中的值需要執行下一步才會在程序中體現出來。最簡單就是在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模擬函數返回值

當我們發現一個函數我們不想執行,只需要得到它的結果的時候,我們可以用lldb來完成這一件事。

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

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閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

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