你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> ios 調試技巧

ios 調試技巧

編輯:IOS開發綜合

一、BreakPoint(普通斷點)

當程序運行到斷點處,便暫停運行。
這裡寫圖片描述

調試過程可通過下方看到對應參數的值
這裡寫圖片描述

二、Condition BreakPoint (條件斷點)

對斷點的屬性進行設置,使斷點智能化。右鍵進入斷點屬性設置。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160325/20160325145510350.png" title="\" />

1、Condition 參數 : 特定值暫停程序運行。下圖表示,當運行到i=2的時候,暫停運行。
這裡寫圖片描述

此時,在控制台輸出i=0和i=1的值,當i=2的時候,斷點生效程序暫時停止運行。我們在此時再將i的值po出來,驗證下,結果是一致的。
這裡寫圖片描述

2、lgnore參數(int類型): 忽略程序最前面的n次運行,而在n+1次中斷程序,暫停運行。
這裡寫圖片描述

圖中表示,在輸出第3個數時,停止運行,此時,應該輸出0、1、2這個三個數。此時,po出i的值,應該是i=3。驗證下。
這裡寫圖片描述

3、Action 參數: 查看某個函數被調用的次數和某個函數具體在哪個函數裡面執行。設置Action參數如下,注意要選中Automatically continue after evaluating actions。

3.1 輸出函數NSLog被調用次數

這裡寫圖片描述

查看控制台
這裡寫圖片描述

3.2、 輸出函數NSLog具體在哪個函數裡面執行(被調用)
這裡寫圖片描述

查看控制台,輸出函數NSLog在viewDidload中被調用
這裡寫圖片描述

三、異常斷點(Exception BreakPoint)

開發iOS知道,如果我們因為異常然後程序crash了,代碼就直接跑到main.m的main函數中去了。為什麼就不能跑到出現異常的代碼中呢?異常斷點就為我們解決該問題,程序就會在異常出現的那行代碼終止。

舉個簡單的例子,下面的這幾行代碼,明顯的越界。
這裡寫圖片描述

程序運行後,在沒有添加全局異常斷點的時候,程序直接crash在main函數中。
這裡寫圖片描述

然而,在你添加異常斷點後,會定位到具體的代碼。
這裡寫圖片描述

添加異常斷點後,再運行程序
這裡寫圖片描述

這裡寫圖片描述

四、符號斷點(Symbol BreakPoint)
符號斷點可以指定哪個類裡具體的某方法執行時中斷。如果沒具體某個類,只寫方法名,那麼當整個工程運行到某方法名時,程序就中斷。
符號斷點的創建跟異常斷點差不多。
這裡寫圖片描述

右鍵編輯符號斷點:在ViewController 類裡面指定到_loadRequest 這個方法時打斷。
這裡寫圖片描述

效果如下
這裡寫圖片描述

當你的符號斷點編輯只剩下方法名,那麼工程裡面指定到Symbol的函數名時,程序都會打斷。
這裡寫圖片描述

五、僵屍對象

僵屍對象 :iOS中把那些已經release但還沒完全消失的對象。
對已經release的對象再次釋放,就會發生異常。
自從使用ARC後,由於對象釋放產生的異常已經大大變少,但偶爾還會出現。開啟僵屍對象模式後,就能快速定位到異常位置。開啟方式如下:Product–>Scheme–>Edit Scheme.
勾選Enable Zombie Objects即可。
這裡寫圖片描述

六、lldb命令
Xcode中使用llvm編譯器,lldb是llvm中的調試器,我們可以使用一些簡單的命令進行調試,上面再講到斷點的時候有提到po命令。這是最常用的命令行之一,另外一個就是print。
這裡寫圖片描述

七、暴力調試

  應該說NSLog打印信息是初學者最喜歡的調試手法,也是最簡單的調試。
  通過打印出的信息查看程序運行的路徑。但是打印出的信息較少,本身NSLog效率較低,而且損耗性能。一般在打包發布app的時候,盡量的去屏蔽這個輸出函數。
  應該有很大一部分人會將NSLog定義成宏,在debug下,打印,release下不打印。
  然後,除了這個,輸出函數要定義成宏海可以繼續優化。輸出具體:所在類名、所在方法名、詳細時間、行號。
#define NSLog(format, ...) do {   

fprintf(stderr, "<%s : %d> %sn",   

[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],   

__LINE__, __func__);   

(NSLog)((format), ##__VA_ARGS__);   

fprintf(stderr, "-------n");   

} while (0)  

八、運行時間
有時候我們想要准確的知道某段代碼、某個循環執行的時間,然後分析效率等問題,這個時候就需要執行時間是多少。
定義兩個宏

#define TICK   NSDate *startTime = [NSDate date]
#define TOCK   NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])

這裡寫圖片描述

九、手機截屏
可能你看到這個標題會覺得很奇怪,為什麼手機截屏也放在調試技巧裡面?開日常開發中,我們經常會在真機調試階段用手機電源鍵+Home鍵截屏,然後利用手機上面的通訊軟件發送給其他人,這個比較麻煩。x-code 也為我們提供了屏幕截屏的方式。
真機調試過程中,選擇debug->View Debugging ->Take ScreenShot of IPhone。 mac桌面就會生成手機運行在該界面的手機屏幕截圖。注意: 每需要截圖都需要設置一次。

十、UI調試
一般的老程序員喜歡用純代碼去實現UI,對於新手來說,特別是復雜的UI,接手這樣的項目就比較頭疼。x-code提供了視圖之間的層級關系,方便我們進行調試。當我們程序運行到某一個界面時,可點擊下面的按鈕
這裡寫圖片描述

這樣就會進入視圖調試模式,就可以輕易查看視圖之間的層級關系
這裡寫圖片描述

左側的樹形層次圖可以在查看線程、隊列和UI之間切換
這裡寫圖片描述

十一、內存分析器
快捷鍵: commadn+ shift +B
這個一般用來監測內存洩露問題。它是一種靜態的工具,可以對我們的程序進行分析,找出我們未使用的變量,或一些死存儲。

十二、Profile
這裡寫圖片描述組件,幾乎每一個組件都能單獨開一篇博客。之後再講吧。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved