iOS 翻譯-Xcode使用-文檔翻譯

本文是我的翻譯記錄~並非技術分享~有想看中文文檔的,能夠閱覽一下~編程

About Debugging with Xcode數據結構

關於Xcode調節器框架

 

尋找和消除代碼中的問題是開發過程當中的一個關鍵部分。Xcode調試器預置的通用調試有用的功能,你的應用程序啓動時自動運行。調試器能夠幫助您:異步

1.肯定和定位問題
2.檢查運行代碼的控制流和數據結構,以查找緣由
3.制定一個解決方案,並編輯相應的代碼
4.運行修改後的應用程序,並確認該修補程序編輯器

你應該熟悉應用程序設計和編程的概念。與一些熟悉Xcode也推薦;看到Xcode的概述。函數

每一年,蘋果在全球開發者大會上的幾回會議都致力於在本指南中的材料進行調試,並將其添加到有用的技術。這些會話可供您在蘋果開發者網站上的蘋果開發者庫,很容易找到過濾的「調試」工具

如下新的WWDC演講的重點使用Xcode調試器:
WWDC 2014:Xcode 6的調試:學習如何應用程序隊列工做,探索和解決用戶界面,添加自定義快速查找支持。
WWDC 2013:調試與Xcode:檢測和修復性能問題使用Xcode的圖形調試器。
WWDC 2013:先進的調試:調試LLDB使用終端和Xcode的圖形調試器。性能

一本好的啓蒙書是David J.Agans寫的叫作《The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems》學習

 

Quick Start測試

快速開始

 

設想一下:你有一個成功的應用程序,你正在添加一個新的功能。單擊「運行」按鈕,在工做區中的工具欄和您的應用程序成功生成後,運行你的應用程序並啓動Xcode調試會話。
當應用程序運行時,Xcode窗口調整爲打開調試區的底部和調試導航左側的調試。在調試導航器中,調試儀表有助於監控您的程序使用系統資源。你開始練習你的應用程序,並使用一些新的代碼,你只添加到顯示圖片或圖…沒有什麼顯示。

 

如今你應該作什麼?

開始準備調試!

在調試中最重要的事情是分析代碼的邏輯,或控制流程,並確保應用程序提供正確的數據。邏輯問題的應用程序表現出意外的行爲:沒有發生(如在假設的狀況下,如上所述),錯誤的事情發生,或應用程序崩潰。執行不正確操做的代碼常常向用戶呈現錯誤的數據;想象一個計算器上的按鈕按鈕,添加1和1,並得到結果20。當你看到一個問題,以確保應用程序的行爲在計劃之中並顯示出正確的結果呈現給用戶。
在你的假設的狀況下,你的新代碼彷佛沒有被執行。你還不知道這個密碼是否是沒有打,仍是沒有產生一個輸出。可是你知道有什麼不妥,你有一個錯誤。
其餘問題的狀況更難以發現。在調試程序中使用一個應用程序可讓你有機會使用調試儀監視系統資源的使用。注意圖形的形狀,並考慮你應該指望看到的應用程序運行和代碼的各個部分的運行。 例如,若是你看到在中央處理器或內存表中出現了意外的尖峯,例如,這些可能會顯示更爲微妙的問題。

 

單擊一個規範,打開一個更詳細的報告,爲一個更高分辨率的視圖。

 

 

在這兩種狀況下,你的新代碼,不在你的指望內和在調試儀表的意外跡象,你可能不會當即知道問題的緣由。不過,你已經有一些信息:
在你開始添加新功能以前,應用程序的行爲是正確的。
應用程序的行爲正確的點,你使用該應用程序的用戶界面來運行新的代碼。
你知道你在源代碼中添加了什麼新的代碼。
爲了進一步隔離這個緣由,能夠在代碼中設置斷點。

 

使用斷點

斷點是一個多功能的解決方案,用於檢查一個運行的應用程序。
斷點中斷正常的執行,以便您可使用調試欄控件來運行您的應用程序,以檢查每一行代碼的控制流和狀態變量。當你的程序遇到斷點,調試器暫停應用程序的主窗口,切換到Xcode與源定位爲你檢查,並填充變量視圖和過程視圖和導航的調試工具在暫停應用程序的狀態。斷點有幾個功能,您可使用修改它們的行爲,使您更容易收集信息。在運行應用程序以前,能夠在源代碼中添加斷點,能夠在運行時將它們添加到代碼中。
插入斷點:
1.在源編輯器中定位源。
2.點擊資源編輯器槽旁邊的線在你要暫停的部位。
建立一個文件和一個行斷點,默認狀況下是可用的。

 

 

在調試欄中,您可使用各類方法,如在調試器中看到的控件。經過手動的一段代碼來檢查你的代碼,它也能夠是耗時的。一旦你在你的代碼中放置一個斷點,你能夠設置它以不一樣的方式操做,以提升你的調試效率。控件請單擊「斷點」以顯示上下文相關的菜單,而後選擇「編輯斷點」。

您能夠在一個條件的基礎上配置斷點以停止該程序。由於你的應用程序正在運行時,斷點是活動的,你可使用任何代碼或變量在你的應用程序,在該點的源點的激活,以測試一個條件的範圍。

 

斷點條件在不少方面都是有用的。舉個例子,說你的新功能依賴於一個變量的狀態。你注意到當一個問題發生時,你檢查一個變量的應用程序在一個斷點處停頓,這個變量老是有一個特殊的異常狀態或其餘不尋常的值。一旦你知道,你能夠設置一個斷點條件來監視變量和暫停應用程序時,只有當變量具備該值。
斷點的另外一個有用的功能是觸發一個動做的能力。

 

鑑於上述狀況,循環遞增和變量須要達到一個特定的狀態,也許你有興趣知道每次循環執行是該變量的值。你能夠設置斷點操做打印到控制檯變量描述在每一次經過循環使用LLDB命令po(po是提供LLDB縮寫爲「打印對象」命令)。
您的代碼中的斷點用斷點導航器管理的。

 

使用斷點導航器,你能夠看到你的代碼,全部的斷點編輯斷點,啓用和禁用它們,並在Xcode中經營範圍變化。要啓用或禁用斷點,請單擊「斷點導航器」或「源編輯器」中的「指示器」,一個「灰色」指示指示該斷點被禁用。
要刪除一個斷點,當您完成使用它,作如下的一個:
1.把它拖到源代碼編輯器中。
2.選擇在Breakpoing Navigator和按下刪除。
3.控件點擊它(在源代碼編輯器或斷點導航器),選擇刪除斷點。

 

您能夠在同一時間啓用或禁用多個斷點。例如,你可能要作的是,例如,你肯定在代碼的不一樣部分的幾個問題。
單擊「斷點」行中的斷點行將源程序移動到斷點位置的源編輯器中。
有時,當您已經放置了一組斷點,調試一個問題,但暫時須要運行您的應用程序,而無需暫停,這樣你就能夠達到這個問題,你極可能會出現問題。停用或激活全部斷點,斷點調試欄點擊激活按鈕。

斷點激活按鈕不更改斷點的啓用/禁用設置。全部的斷點保持在地方,當激活時,啓用或禁用,由於它們是在被激活以前。

 

 

調試器中的控件
調試導航程序能夠幫助你檢查應用程序的控制流。當應用程序被一個斷點停時,調試程序顯示應用程序的執行所產生的最後的值。下面的調試儀表是過程視圖,它能夠被設置爲顯示你的應用程序的運行狀態,由線程或隊列組織。

 

 

調試區在Xcode的主窗口的底部包含三個窗格:調試欄,變量視圖,與控制檯。


在調試欄中的分佈控制

 

調試欄包含隱藏和顯示調試區、斷點激活按鈕和繼續/暫停按鈕的控件。當應用程序被暫停的一個斷點,點擊繼續按鈕恢復程序。
下一步的繼續/暫停按鈕是一組三個按鈕,讓你的應用程序。他們的基本操做是一步一步的指令,一步一步的指令,並走出一條指令。若是你把鼠標放在這些按鈕上,交替的步進模式會出現,當你點擊時使用修改鍵:

 

 

你在代碼行代碼前設置了一個斷點,這是致使問題的問題。這個暫停應用程序,這樣你就能夠檢查變量。而後,你一步一步的應用程序,看看變量的狀態如何變化,進入,進入,並在所需的代碼行。一旦你完成了檢查,你點擊繼續/暫停按鈕恢復應用程序的正常運行。

調試欄的分步控制也可在調試菜單中,並有鍵盤,使他們的使用效率和方便。默認鍵綁定可使用Xcode Preference>Key Bindings。
調試欄中的其餘按鈕更專業化。調試視圖層次結構中討論的按鈕。在這2個按鈕的右邊,進程/線程/堆棧幀跳轉欄使您能夠直接進入暫停應用程序中的堆棧幀,一個有用的替代方式來移動與調試導航程序視圖顯示一塊兒運行的。
在下一節中,您將看到如何調試區域的可變視圖容許您檢查變量,但常常調試一個問題的最好方法是儘量多地查看問題區域周圍的源代碼。這是當你使用隱藏/顯示按鈕來隱藏調試區域,只留下調試欄可用於步進源編輯器。你能夠再次打開「調試區」,再按「隱藏/顯示」按鈕。

 


變量視圖檢查變量

在調試區內使用變量視圖檢查變量,並肯定其狀態。

 

 

 

正如你能夠從圖中看到的,變量視圖窗格列出了在應用程序暫停的斷點處的每一個變量的可用性。下一個披露三角形是一組圖標,表示變量的種類,而後變量名。名稱後面的變量摘要表示當前值。當你在調試欄中使用步進控件來執行你的應用程序,你能夠看到源代碼中每一個操做致使的變量值。
在變量視圖窗格,左下角是一個過濾器的彈出菜單,默認設置爲自動。此設置限制的變量在查看那些一般被認爲是大多數調試有趣的,可是你能夠設置變量視圖顯示全部變量(包括全局變量,靜態,和寄存器)或只是局部變量。
對於複雜的變量結構和對象,你能夠經過單擊「信息披露」的三角形來鑽入變量的全部組件中。這容許你看到變量的每個細節的一次,以及他們如何改變你的應用程序。

 

 

 

過濾器旁邊的彈出式菜單是快速查找按鈕image: ../Art/dwx-qs-17b1_2x.png ,和打印的描述image: ../Art/dwx-qs-17b2_2x.png,你在列表中選擇一個變量,單擊這些按鈕,在彈出的窗口中顯示出來。快速查找按鈕產生一個圖形化的渲染與尺寸和/或價值信息,根據選定的變量的類型。當你試圖看到一個複雜的對象,以及它是如何被繪製或渲染的時候,快速的圖形化渲染就特別有用了。下面是快速查找按鈕被用來在變量視圖中顯示一個UIBezierPath對象實例:

 

 

注:
快速查找顯示系統提供的對象類型和你的對象類型。查看更多信息的快速查找數據類型。
打印描述按鈕提供了有關該變量的文本信息,至關於使用命令在控制檯中的命令。當你點擊打印描述按鈕,它發出的PO輸出到控制檯以及顯示在彈出窗口。
對於許多開發人員來講,最好的方法是在調試器中暫停時儘量多地查看源代碼。你能夠在源代碼編輯器中直接隱藏調試區域和工做,使用快速查找和打印描述按鈕來檢查變量。按住鼠標在一瞬間源編輯器一個變量和一個彈出窗口,變量將顯示在變量查看相同的信息出現。你能夠打開「信息披露」的三角形,再以變量的角度,看到一個複雜變量的組成部分,等等。彈出式窗口也有快速查看和打印描述可用按鈕就好:點擊它們具備相同的效果,點擊在變量視圖。
例如,此圖顯示了一個CGPoint變量進行描述的打印按鈕:

 

 

 

正如你可能指望,打印描述按鈕輸出顯示在一個彈出窗口,在控制檯。
大多數的時間,您使用的變量視圖,快速查找,並打印描述工具來檢查變量值時,你的調試,確保他們的預期。然而,有時,你可能想嘗試改變一個變量的值,在fly中看到,糾正了一個問題,而沒必要通過一個全面建設週期。這是在源代碼編輯器中使用彈出窗口在變的容易作:將鼠標停留在一個變量直到彈出窗口出現,向下鑽取到變量使用三角形你想要的變量,而後雙擊該值。記住,改變一個變量的值在fly中常常有一點風險,由於你正在改變運行應用程序的狀態,這可能會產生反作用,但對某些類型的調試它能夠提供你所尋找的信息。
理解控制檯
Xcode調試器區包括控制檯視圖。控制檯視圖是一個終端,如命令行環境,在調試會話正在運行時,記錄從應用程序和調試器中輸出的。當你運行、中斷和檢查變量時,你可使用控制檯來收集打印的變量值。在控制檯視圖中的值始終堅持整個調試會話期間,您能夠看到在整個會話期間生成的輸出列表。當您完成一個會話並從新運行該應用程序的另外一個會話,該控制檯被清除,因此它老是在一個調試會話開始時開始空。可是,您能夠經過向報表導航器和檢查存儲在那裏的調試會話的內容來回顧過去的調試會話中的控制檯的內容。
Xcode調試器使用LLDB,低級別的調試引擎,發揮其功能。控制檯能夠直接使用LLDB命令行界面,你能夠在控制檯視圖中使用任何LLDB命令來補充或擴展Xcode調試經驗。

 

 

 

LLDB是一個功能強大的調試環境的許多功能。學習使用LLDB經過閱讀LLDB快速啓動指南的基礎知識。在調試導航儀研究回溯總的狀況在本章前面所述,你啓動應用程序運行按鈕。你試圖調用你添加的新代碼,並無發生什麼。如今,您已經添加了一個斷點,新的代碼應該從並嘗試再次調用代碼。Xcode調試器已經停了你的應用程序在該位置和人口變量視圖在調試和調試導航儀的應用程序的當前狀態。你極可能會先去看一下變量及其值。變量視圖,快速查找,並打印描述工具給你第一次看的應用程序的狀態。須要解決的下一個問題是「代碼怎麼會在這裏?「要回答這個問題,您可使用調試導航程序視圖窗格。當程序停在斷點,調試器」轉向「在調試導航過程視圖窗格中的程序流程,介紹給你。一些定義將使這一明確:棧幀是一個調用方法的實例。「平倉」意思是「查看包含你的斷點的方法,而後將堆棧框架指針和調用站點的方法進行跟蹤。」。堆棧幀解開這個時尚的序列稱爲回溯。默認狀況下,這個視圖是由當前堆棧幀的線程來組織的,在源代碼編輯器中,程序計數器的位置在斷點處突出顯示。(調試儀已被隱藏在這個例子中,調試導航儀使用高亮顯示的按鈕,讓你集中精力在過程視圖顯示回溯。)

 

回溯可讓你瞭解在你的應用程序的控制流。在「調試導航程序」視圖窗格中顯示每一個堆棧幀的圖標標識。圖標告訴你在編譯代碼的堆棧幀是從哪裏來的。有用戶代碼圖標,基礎框架,它或UIKit框架,圖形框架,等等。調試器檢索和在這個充滿歷史執行接頭,甚至包括堆棧幀再也不記憶。
這一觀點的回溯,你能夠看到你的應用到目前的狀態,在斷點處暫停。看上面的插圖:
該應用程序是停留在你的源代碼在_plotaccel,這在線程5執行。
這個代碼被一個系統函數調用,這是一個被調度的異步回調的一部分。
一些系統堆棧幀省略視圖虛線表明他們。你能夠經過選擇最左邊的按鈕在濾棒在調試導航儀底部顯示這些堆棧幀。
虛線下面的堆棧幀顯示了被稱爲代碼的工做線程的開始。
下面,你能夠看到塊異步排隊中記錄的回溯。
記錄顯示,這一塊是回溯awakefromnib入隊時,可能在應用程序開始。
當你點擊在回溯堆棧幀的源代碼編輯器,跳躍在源或在反編譯的二進制可執行文件,點。對於代碼的堆棧幀,能夠看到源代碼。若是幀在內存中,您能夠看到變量值;若是堆棧幀在內存中再也不是,它是一個記錄堆棧幀的變量值是不可用的。

在調試導航程序視圖中,若是一個堆棧幀的圖標是顏色的,則堆棧幀是內存中的。灰色圖標旁邊的堆棧幀代表,堆棧幀是再也不在內存中,和調試導航已檢索堆棧幀經過分析記錄的呼叫歷史;調試器不能從新建立的變量值從記錄的呼叫歷史。

 

 

使用調試導航和回溯,你能夠看程序的代碼已經沿着指望的路徑移動到斷點或是否偏離你的預期要。跳到用戶代碼在回溯當你有問題時,你能夠設置新的斷點,中止應用程序在前點看看它經過檢查變量沿着路走歪了。若是你的新代碼不運行或顯示由於條件沒有實現正確的回溯,找到正確的點,設置一個斷點,說明問題,單擊運行/暫停恢復正常運行,而後執行,應該從新運行新的代碼的做用。這個時候中止在程序流程和檢查變量,而後一步一步的應用程序,直到你找到問題的緣由,檢查的變量一路上。循環調試過程調試是一個反覆的努力。你發現一個問題,你設置斷點來幫助你定位在源它發生,你檢查的回溯和變量來評估他們的狀態和問題的緣由,和你想出一個解決方案或修理。有了一個潛在的解決方案,你作出了改變的來源和從新運行該應用程序,看看這個問題是否獲得解決。若是測試顯示這個問題仍然存在,你就重複這個循環,直到你把正確的固定放置到位。當問題被解決時,您能夠禁用或刪除您在其調查中使用的斷點。你不想讓他們在你繼續下一個問題的方向前進。

相關文章
相關標籤/搜索