寫代碼不免出現bug。 儲備些調試技能絕對可以提升你的工做效率,讓bug無所遁形。下面就和你們分享一些我在工做中經常使用的iOS調試小技能。html
最簡單,基礎的調試方法就是打印日誌了。貼出兩段封裝好的日誌打印代碼:git
//swift版
func DLog<T>(message: T, file: String = #file, method: String = #function, line: Int = #line) {
#if DEBUG
print("<\((file as NSString).lastPathComponent) : \(line)>, \(method) \(message)")
#endif
}
//OC版
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"<%s : %d> %s " fmt), [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);
#else
#define DLog(...)
#endif
複製代碼
eg:github
//在AppDelegate.m中調用下面的方法
- (void)applicationDidFinishLaunching:(UIApplication *)application{
DLog(@"hello world");
}
//打印結果: 2016-09-18 17:19:27.931 DateCell[2901:1622220] <AppDelegate.m : 54> -[AppDelegate applicationDidFinishLaunching:] hello world
複製代碼
普通斷點是調試中最常使用的。當程序運行到斷點處就會暫停運行。其設置方法很是簡單:在須要設置斷點的代碼行的左側單擊便可。數據庫
條件斷點是在普通斷點的基礎上添加了判斷條件。當程序執行到斷點處,而且知足設置的條件時斷點纔會有效。設置方法以下:express
在上面的設置中,條件斷點的條件是 i==3, 那麼在整個循環中只有在i=3時程序纔會在斷點處中止執行。 在 **Edit Breakpoint...**窗口中有下面四個輸入項:swift
- Condition 設置的條件。
- Ignore 表示忽略多少次以後斷點有效。例如:不設置條件,Ignore設置爲4,則i=4時程序在斷點處中止。
- Action 在程序斷點處執行的操做(執行完這個操做後代碼中止運行,此時設置斷點處的代碼尚未執行)。這裏的操做是LLDB語句,關於LLDB會在下面介紹。
- Options 當選中時,執行完Action的操做後代碼不會中止,就像沒有設置斷點同樣。
在設置異常斷點的狀況下 當程序crash時 Xcode會幫咱們定位到crash產生的位置。bash
設置異常斷點步驟:網絡
符號斷點可以爲某一個方法或者 某一個類的某一個方法設置斷點。實現的功能以下圖:app
設置步驟以下:工具
LLDB的Xcode默認的調試器, 咱們經過執行LLDB命令使調試過程更加的靈活。 Xcode內嵌LLDB調試窗口。在程序執行到斷點後你能夠輸入LLDB命令操做調試過程。
LLDB經常使用命令以下:
1, po (print object)輸出對象, 如 po [self view]; 2, p (print)用於輸出基本類型, 如 p (int)[[[self view] subviews] count] 輸出子視圖個數。 3, expr (expression) 能夠在調試時動態執行指定表達式,並將結果打印出來。經常使用於在調試過程當中修改變量的值。例如上圖所示,程序第一次執行到斷點時 執行下面的指令:expr i=4
你會看到以下的輸出: (int) $0 = 4 繼續運行程序,程序輸出的信息是:value:4 i==4 4, call call便是調用的意思。其實上述的po和p也有調用的功能。所以通常只在不須要顯示輸出,或是方法無返回值時使用call。咱們能夠在viewDidLoad:裏面設置斷點,而後在程序中斷的時候輸入下面的命令: call [self.view setBackgroundColor:[UIColor redColor]] 此時view的背景顏色變爲紅色。 5, bt 打印調用堆棧,加all可打印全部thread的堆棧。不詳細舉例說明,感興趣的朋友能夠本身試試。 6, fr v -R 命令來打印出變量的未加工過期的信息
若是想了解更詳細的內容,戳這裏。
Chisel是 facebook開源的用於界面調試的lldb命令。
Chisel 使用 homebrew 來安裝,若是你沒有安裝homebrew, 參考 homebrew。
brew update
brew install chisel
複製代碼
安裝完成後,在~/.lldbinit 中添加以下內容, 沒有~/.lldbinit則新建。
# ~/.lldbinit
...
command script import /path/to/fblldb.py
複製代碼
重啓Xcode, 此時Chisel就可使用了。
英語很差的同窗能夠看這裏。
Reveal 絕對是iOS界面調試利器。只要用上一次你就會離不開它。對於Reveal的介紹能夠去官網瞭解。
Reveal是收費的,提倡正版。下面的破解版只供教學使用,不可用於生產環境。 1, 安裝包及破解軟件 連接: https://pan.baidu.com/s/1dFgjaYP 密碼: 6wyq 2,破解步驟見破解文件中的使用說明。 3, 打開Reveal,開始使用。Reveal的新版本可能修改驗證邏輯,若是沒有破解成功那就使用正版的吧。
在使用Reveal以前須要對iOS項目進行簡單配置。
配置起來略有麻煩。下面是詳細的配置過程: 1, 使用Xcode打開你想要查看UI的工程;
2, 打開Reveal,點擊 Help → Show Reveal Library in Finder;
3,將Reveal.framework 拖入打開的Xcode工程.並點擊完成;
4,點擊Build Phases 而後從Link Binary With Libraries 刪除Reveal.framework;
5, 而後選中Build Settings 在搜索欄中輸入 Other Linker Flags。選中Other Linker Flags 在Other Linker Flags中輸入下面代碼 : -ObjC -lz -framework Reveal
6,運行模擬器,打開Reveal,連接模擬器。
到此大功告成。接下來你就能夠經過Reveal 對你的界面進行debug了。
FLEX是Flipboard開源的一系列在應用中調試的工具集。FLEX以第三方庫的形式集成在應用中,使用時將類庫加到工程中,而後 經過調用
[[FLEXManager sharedManager] showExplorer];
就可顯示出用於調試的工具欄進行調試。
它提供的功能以下:
簡直吊炸天。當你將FLEX集成到你項目中時就會認識到它的威力。
上面介紹了六種調試方法,開發時能夠根據具體狀況選用最合適的調試方法。若是本博文對你有幫助就送個喜歡吧。