[譯] 斷點:像專家一樣除錯程式碼

PTHFLY發表於2018-02-01

斷點:像專家一樣除錯程式碼

[譯] 斷點:像專家一樣除錯程式碼

當我剛開始成為一名iOS開發者的時候,我最大的問題是:當應用崩潰時,我真的不知道 iOS 、 Swift 、Objective-C 都是如何工作的。那時候,我寫了很多爛程式碼,從不擔心記憶體使用、記憶體訪問、 ARC (譯者注:Automatic Reference Counting )。那僅僅是因為我不知道那些事情。看在上帝的份上,我是個菜鳥。

就像許多新手一樣, Stack Overflow 社群教會我許多關於『如何做正確的事情』的方法。我學到了許多幫助提升工作過程的竅門。在這篇文章中,我將分享在這一階段過程中最重要的一些工具,那就是斷點

那麼,擼起袖子幹起來吧。?

斷點

毫無疑問, Xcode 斷點是一個強大的工具。其主要目的是除錯程式碼,但是如果我說他們還要更多作用呢? OK,那我們從一些竅門開始吧。

Conditioning breakpoints 條件斷點

也許你已經陷入了這樣一種困境:你的 TableView 對於所有使用者 model 都執行良好,可就是有那麼一個引起來一些麻煩。為了除錯這個例項,首先你可能會想:『 Ok , 我會在 cell 裝載的地方打個斷點看看什麼情況』。但是對於每個 cell ,甚至是暫時正常的那些,你的斷點都會被啟用,你不得不不停跳過直到你抵達你想要除錯的那個。

The Office TV show gif, saying

為了解決這些問題,你可以繼續然後給斷點設定一個停止的條件,就像我對使用者『 Charlinho 』做的那樣。

A conditional breakpoint screenshot

Symbolic Breakpoints 標誌斷點

“放輕鬆,我會用 pod ,那應該會給我們省點工作量。”

誰都無法保證永遠不會說這句話。但是使用 pod 或者一個外部庫意味著你向你的工程引入了外部程式碼並且也許你並不知道它是怎麼寫出來的。比如說你發現在 pod 內部一堆方法裡存在一個錯誤,但是你不知道這個方法在哪裡。做個深呼吸,保持冷靜。你有**Symbolic Breakpoints**.

當事先宣告的 標誌 被喚醒,這些斷點會被啟用。 標誌 可以是任何非成員函式、例項、類方法,是否在你的類裡都可以。因此在函式中加一個斷點,無論誰喚醒它,你只要加一個 Symbolic Breakpoint 來觀察你想要除錯的函式。在我下面的樣例中,我觀察 UIViewAlertForUnsatisfiableConstraints 方法。每當 Xcode 發現 Autolayout 問題的時候,這個方法都會被喚醒。你可以看在這篇博文看一個更深入的例子。

A Symbolic breakpoint option screenshot

Customizing breakpoints 自定義斷點

像我之前說的,斷點是一個強大的工具。你知道嗎?你甚至可以在端點上自定義動作。是的,你可以這麼做!你可以執行 AppleScript ,捕獲 CPU 框架,使用 LLDB ( Low-level Debugger , XCode 內建的除錯工具)命令,甚至 shell 命令。

[譯] 斷點:像專家一樣除錯程式碼

你只需要簡單地點選右邊的按鈕,選擇 edit breakpoint

好了,你看會想: “酷!但是為什麼要這麼做?”

我會給你一個很好的使用案例來幫助你的理解。一個 APP 中最常見的功能是登入,有時候測試它有點無聊。如果你正在同時使用管理員賬號和普通賬號,你需要不停地輸入使用者和密碼,會讓這個過程變得難以忍受。一般的『自動化』登入頁面的方法是建立一個 模擬 例項,並把它應用於 if debug 分句。像這樣:

struct TestCredentials {
    static let username = "robo1"
    static let password = "xxxxxx"
}

private func fillDebugData() {
     self.userNameTxtField.text = TestCredentials.username
     self.passwordTxtField.text = TestCredentials.password
}
複製程式碼

但是你可以用斷點來讓事情變得簡單一點!

進入登入頁面,加一個斷點,然後加了兩個填寫賬號密碼的 LLDB 表示式。像我下面的例子一樣:

A Custom breakpoint executing express commands.

考慮到這一點,你可以加兩個不同身份的斷點。你只要生效/失效你想要測試的那個,就可以在兩個身份間切換了。一旦你在執行中切換使用者,也不需要重新構建。

很酷,不是嗎?

COMBO BREAKER!

在我寫這篇文章的時候,WWDC 2017 正在舉行。他們釋出了一些例如新版 Xcode 9 這樣的酷炫傢伙。如果你想知道在 Xcode 9 中有哪些新的除錯工具,我強烈推薦看 Session 404

[譯] 斷點:像專家一樣除錯程式碼

這就是全部內容了!現在你知道了一些在我還是新手的時候幫助巨大的最基礎的斷點竅門。還有哪些我沒有提到的酷炫竅門呢?你也有好的主意?請在評論區隨意討論!


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章