iOS高效調試

來源:互聯網
上載者:User

標籤:

寫代碼難免出現bug。 儲備些調試技能絕對能夠提高你的工作效率,讓bug無所遁形。下面就和大家分享一些我在工作中常用的iOS調試小技能。

1. 列印 

最簡單,基礎的調試方法就是列印日誌了。貼出兩段封裝好的日誌列印代碼:

//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:

//在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

 

2. 斷點

 (1)普通斷點

 普通斷點是調試中最常使用的。當程式運行到斷點處就會暫停運行。其設定方法非常簡單:在需要設定斷點的程式碼的左側單擊即可。

 

(2)條件斷點(為斷點添加條件和其他屬性,暫且就稱它條件斷點)

條件斷點是在普通斷點的基礎上添加了判斷條件。當程式執行到斷點處,並且滿足設定的條件時斷點才會有效。設定方法如下:

在上面的設定中,條件斷點的條件是 i==3, 那麼在整個迴圈中只有在i=3時程式才會在斷點處停止執行。

在 Edit Breakpoint...視窗中有下面四個輸入項 

  • Condition 設定的條件。

  • Ignore 表示忽略多少次之後斷點有效。例如:不設定條件,Ignore設定為4,則i=4時程式在斷點處停止。

  • Action 在程式斷點處執行的操作(執行完這個操作後代碼停止運行,此時設定斷點處的代碼還沒有執行)。這裡的操作是LLDB語句,關於LLDB會在下面介紹。

  • Options 當選中時,執行完Action的操作後代碼不會停止,就像沒有設定斷點一樣。

(3)異常斷點Exception BreakPoint

在設定異常斷點的情況下 當程式crash時 Xcode會幫我們定位到crash產生的位置。

設定異常斷點步驟: 

(4)符號斷點Symbolic Breakpoint

 符號斷點能夠為某一個方法或者 某一個類的某一個方法設定斷點。實現的功能如:

設定步驟如下:

 

3. LLDB

 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 命令來列印出變數的未加工過時的資訊

 

如果想瞭解更詳細的內容,戳這裡。

 

4. Chisel

Chisel是 facebook開源的用於介面調試的lldb命令。

安裝

Chisel 使用 homebrew 來安裝,如果你沒有安裝homebrew, 參考 homebrew。

brew update

brew install chisel

 安裝完成後,在~/.lldbinit 中添加如下內容, 沒有~/.lldbinit則建立。

# ~/.lldbinit

...

command script import /path/to/fblldb.py

 

重啟Xcode, 此時Chisel就可以使用了。

命令 

英語不好的同學可以看這裡。

 5. 介面調試利器: Reveal

Reveal 絕對是iOS介面調試利器。只要用上一次你就會離不開它。

安裝

Reveal是收費的,提倡正版。下面的破解版只供教學使用,不可用於生產環境。

1, 從官網下載Reveal並安裝;

2,下載破解檔案 提取密碼:7x48;

3,破解步驟見破解檔案中的使用說明。

4, 開啟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了。

 

 

6. 調試工具集:FLEX

 

FLEX是Flipboard開源的一系列在應用中調試的工具集。FLEX以第三方庫的形式整合在應用中,使用時將類庫加到工程中,然後 通過調用[[FLEXManager sharedManager] showExplorer]; 就可顯示出用於調試的工具列進行調試。 

它提供的功能如下:

  • 查看、修改views

  • 查看任何對象的屬性

  • 動態修改屬性

  • 動態調用執行個體方法和類方法

  • 查看網路請求過程

  • 添加類比的鍵盤快速鍵

  • 查看系統日誌

  • 從堆中擷取任何對象

  • 查看沙箱中的檔案

  • 查看檔案系統中的SQLite/Realm資料庫

  • 在模擬器中觸發3D touch

  • 查看你應用中所有的類

  • 快速擷取常用的類,例如[UIApplication sharedApplication], the app delegate, the root view controller on the key window, and more.

  • 動態查看NSUserDefaults裡面的值

簡直吊炸天。當你將FLEX整合到你項目中時就會認識到它的威力。

 

iOS高效調試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.