[譯] Xcode 和 LLDB 高級調試教程:第 2 部分

在三部分教程的第一部分,咱們介紹瞭如何利用 Xcode 斷點操做現有的屬性值,以及使用表達式語句注入新代碼。前端

我特意開發了一個帶有幾個錯誤的演示項目,詳細說明了如何使用不一樣類型的斷點配合 LLDB 來修復項目/應用程序中的錯誤。android

在繼續閱讀本文以前,最好先看過本教程的 第一部分ios

讓我提醒一下你,本教程的重要規則是: 第一次運行應用程序後,你沒必要中止編譯器或從新運行應用程序,你會在運行時修復這些錯誤。git

觀察點 👀

讓咱們向下一個敵人進軍。github

  1. 用戶能夠加載文章 超過 7 次。

這裏有復現這個錯誤的步驟:express

✦ 打開手機或模擬器的網絡鏈接。後端

✦ 滾動到表視圖的底部,加載更多數據。xcode

✦ 滾動加載更多文章的次數超過 7 次。(記住,對於當前的應用程序,用戶只能加載文章 7 次)bash

考慮這個錯誤的一個方法是弄清 pageNumber 這個整形屬性自從它被傳入到網絡管理器,去取回指定頁碼的新文章對象後是怎樣被改變的。你將會花費一些時間和精力在你還不清楚的代碼庫裏,而且弄清這個錯誤發生在哪裏。markdown

不要擔憂!如今讓咱們作一些神奇的事 🎩

在這個教程的第一部分,你瞭解到 GET HTTP 請求發生在用 pragma mark Networking 標記的部分。那裏只有一個方法 loadPosts。在這個方法的第一行放置一個斷點,而後下拉刷新,加載新的文章對象。這個動做會觸發你剛纔設置的斷點。

Objective-C

Swift

在底部的調試器窗口,點擊「展現變量視圖按鈕」。接着就會滑出一個包含了 PostsTableViewController 全部屬性的視圖。

找到 pageNumber 屬性,右鍵單擊,選擇 「Watch _pageNumber」 / 「Watch pageNumber」。

Objective-C

Swift

這會爲 pageNumber 屬性建立一個叫作「觀察點」的斷點。觀察點是一種斷點,當下一次觀察的屬性有變化的時候它會暫停調試器。

Objective-C

Swift

繼續執行程序。調試器將會暫停,你將會看到一些相似下圖的東西:

Objective-C

  1. pageNumber 屬性舊值和新值的日誌。

  2. 致使 pageNumber 屬性發生變化的方法調用棧。

  3. 致使pageNumber 屬性實際發生改變的當前點。這是屬性的 setter 方法。

若是你回到方法調用棧的第一個點,它將會引導你找到如下的代碼:

Swift

  1. 調試器控制檯通知你,所設置的觀察點被觸發。

  2. 致使 pageNumber 屬性發生變化的方法調用棧。

  3. 致使 pageNumber 屬性實際發生改變的當前點。這是一個叫 updateForNetworkCallEnd 的方法。

很顯然每當 HTTP GET 請求成功時,只要 state 枚舉屬性處於 active 狀態,pageNumber 屬性就會加 1。state 枚舉屬性能夠是 「active」 或者 「inactive」。「active」 狀態是指,用戶能夠繼續加載更多文章(就是說沒有達到上限數字)。「inactive」 狀態則與之相反。結論是,咱們須要在 updateForNetworkCallEnd 內部實現一些邏輯,能夠檢查 pageNumber 屬性,並設置相應的 state 枚舉屬性。

正如你以前所學到的,最好的方式是在不中止編譯器的狀況下,先測試一下假設,而後再去實際的修改代碼。

你猜對了 😉

重要的是,在 pragma mark Support 下面已經有了一個實現好的方法,能夠設置 state 枚舉屬性。這個方法是 setToInactiveState

在條件語句上一行添加一個斷點。接着添加一個調試器動做,而後填寫以下的調試器命令。

Objective-C

expression if (self.pageNumber >= 7) {[self setToInactiveState]}
複製代碼

Swift

expression if (self.pageNumber >= 7) {setToInactiveState()}
複製代碼

作完這些以後,你須要停用以前設置觀察點的斷點,同時也停用了觀察點。

Objective-C

Objective-C

Swift

Swift

如今回到表視圖頂部,下拉刷新,接着向下滾動。

不要高興的太早,咱們還有一個大問題要解決 😄⚔️

接下來去哪裏?

查看 第三部分 教程修復了最後的錯誤,並學習一種新的斷點類型,符號斷點。

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


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

相關文章
相關標籤/搜索