天天看點

Xcode正确的Debugging方法

程式員日常開發中有大量時間都會花費在 debug 上,從事 iOS 開發不可避免地需要使用 Xcode。這篇部落格就主要介紹了 Xcode 中幾種能夠大幅提升代碼調試效率的方式。

“If debugging is the process of removing bugs, then programming must be the process of putting them in.”

——Edsger W. Dijkstra

添加條件

有時候我們可能會在某個循環中建立斷點,但一次又一次地點選 continue 直到我們想要的條件出現,顯然是一種非常低效的方式。好在 Xcode 為我們提供了條件斷點。

首先在下列代碼中插入一個普通的斷點

Xcode正确的Debugging方法

右鍵點選斷點,選擇 Edit Breakpoint,在 Condition 一欄輸入 i > 50

Xcode正确的Debugging方法

這樣一來,隻有當程式運作滿足條件之後才會觸發斷點了。

Symbolic Breakpoint

Symbolic Breakpoint 是一種非常強大的斷點。在 Xcode 中找到 Breakpoint navigator(你可以通過快捷鍵 command + 7),在最下方點選加号,可以看到它。

Xcode正确的Debugging方法

添加之後在 Symbol 一欄輸入 viewDidLoad。

這樣一來,在程式中所有的 viewDidLoad 方法被調用時都會觸發斷點。

Xcode正确的Debugging方法

當然,我們也可以僅僅為特定的某個類的方法添加斷點。在 Symbol 一欄輸入 [ClassName viewDidLoad] (Objective-C) 或 ClassName.viewDidLoad (Swift) 即可。

監控斷點

我們調試程式的大部分時候都是為了監控某個變量的變化,在代碼中變量出現的地方添加斷點不僅累而且還可能漏掉,事後還得一個一個删掉,實在很累。

我們可以通過為變量添加監控斷點來簡單地做到這一點。

找到變量第一次出現的地方,添加一個普通斷點,進入 debug 模式後在 Variables View 中右鍵變量,選擇 Watch 變量名。這樣,每一次該變量被改變都會觸發斷點告知我們。

Xcode正确的Debugging方法

我們可以在 Console 中看到其變化。(注:在 Xcode 6.1.1 版本中,在監控 Swift 變量時似乎還有一些問題,無法正确地顯示變量的值)

Xcode正确的Debugging方法

日志資訊斷點

最常見的 Debug 方式應該就是 NSLog and println 了。通常我們會通過這種方式來列印輸出各種執行個體資訊以檢測程式運作狀态。

但這一調試方式也有很明顯缺陷:

無法在運作時添加

添加數量過多之後幹擾視線,又需要麻煩地删除或注釋掉

會編譯進 App,在正式版本中需要關閉(當然,我們可以通過宏來判斷是否應該編譯,但這也需要額外的操作不是嗎)

所幸在 Xcode 中我們還有另一種選項。

在如下代碼中添加一個普通的斷點,選擇 Edit Breakpoint,然後點選 Add Action,選擇 Log Message,在輸入框中輸入 The number is: @number@。

Xcode正确的Debugging方法

運作效果如下圖所示

Xcode正确的Debugging方法

這裡因為有日志輸出,是以我們可以勾選上最下面的 Automatically continue after evaluating actions,這樣這個斷點就隻會安安靜靜地為我們輸出日志了。

發聲斷點

同日志資訊斷點,編輯普通斷點,Action 選擇 Sound。當觸發斷點時會發出設定的聲音。此 Action 配合 Automatically continue after evaluating actions 選項,可以做到酷炫的聽聲識 Bug。:)

總結

上述的日志資訊斷點及發生斷點都是可以添加觸發條件的。通過這些斷點操作,自然是能夠極大地提升日常開發中調試代碼的效率了。

參考資料

WWDC 2013 Debugging with Xcode

Intermediate Breakpoints