how to use Xcode

Xcode IDE概覽

Xcode 頁面主要分為以下四個部分:

  • 工具欄(ToolBar area):主要負責程序運行調試,編輯器功能區域的顯示 / 隱藏;
  • 編輯區(Editor area):代碼編寫區域;
  • 導航區(Navigator area):展示工程文件列表;
  • 調試區(Debug area):用于程序調試,查看對象信息,打印日志等。

?導航區

詳細功能分別為:

  • 項目導航器(Project navigator):在工程中添加、刪除、分組以及管理文件、查看文件、或者在編輯取區編輯其內容
  • 版本控制管理器 (Source Control navigator): 查看源代碼控制工作副本、分支、提交、標簽和遠程代碼庫。
  • 符號導航器(Symbol navigator):集成所有在工作區中定義的符號,從根本上說符號就是編輯器所能識別的東西,eg:OC 類、結構體、枚舉類型、全局變量等
  • 搜索導航器(Find navigator):在項目和框架中查找任何字符串、引用、定義以及調用層級。
  • 問題導航器(Issue navigator):可查看在打開、分析以及構建項目過程中發現診斷、警告以及錯誤信息
  • 測試導航器(Test navigator):創建、管理、運行以及檢查單元測試
  • 調試導航器(Debug navigator):查看項目運行的 CPU、內存、磁盤、網絡等情況,詳細介紹
  • 斷點導航器(Breakpoint navigator):添加、刪除和編輯斷點。
  • 報告(日志)導航器(Report navigator):查看構建、運行和調試項目以及源代碼控制任務的歷史記錄。

分別對應快捷鍵為:Command + 1 ~ 9

Xcode 常用快捷鍵

文件操作快捷鍵

作用快捷鍵組合
在當前工程中創建一個新文件 (一般包括.h 和 .m 文件)Command + N
在當前工程中創建一個新工程Command + Shift + N
在工程中關閉當前正在屏幕中顯示的文件Command + W
最小化 xcode 編譯器窗口Command + M

調試快捷鍵?

作用快捷鍵組合
編譯并運行Command + R
編譯Command + B
強制退出Command + Q
停止運行Command + .
繼續 (到下一個斷點,如果沒有則執行到結束)Command ?+ Control + ?Y
單步調試F6
跳入某函數F7
跳出某函數F8
添加 / 刪除斷點Command + \ ?(光標必須在指定的行)
靜態代碼分析Command + Shift + B

?Xcode 常用調試方法

斷點

斷點里面根據作用和功能也有很多種類:普通斷點、條件斷點、異常斷點、符號斷點等。

?普通斷點

當程序運行到斷點處時會暫停運行。比如斷點打在 30 行,那么程序就會停在 30 行(注意:程序只運行到了前 29 行,第 30 行其實還沒有被執行。)。只要在代碼行旁邊點擊,就能添加一個斷點,再次點擊,斷點變成淺藍色,就能讓斷點不可用(disable 了,仍然存在,只是不起作用了)。?

條件斷點

打上斷點之后,對斷點進行編輯,設置相應過濾條件。單擊右鍵會彈出選項框,四個選項分別為:

  • Edit BreakPoint:編輯斷點。
  • Disable ?BreakPoint:斷點失效。(相當于上邊說到的單擊斷點變成淺藍色,斷點失效)
  • Delete BreakPoint:刪除斷點。
  • Reveal in BreakPoint Navigator:在左邊的斷點樹狀結構表明該斷點。

這里我主要用到的是第一個:Edit BreakPoint。這里面設置斷點的篩選條件(雙擊斷點也可以快速進入編輯斷點的對話框)。

  1. Condition: 返回一個布爾值,當布爾值為真觸發斷點,一般里面我們可以寫一個表達式。
  2. Ignore: 忽略前 N 次斷點,到 N+1 次再觸發斷點。
  3. Action: 斷點觸發事件,分為以下六種:?
    • AppleScript:執行腳本。
    • Capture GPU Frame:用于 OpenGL ES 調試,捕獲斷點處 GPU 當前繪制幀。
    • Debugger Command:和控制臺中輸入 LLDB 調試命令一致。
    • Log Message:輸出自定義格式信息至控制臺。
    • Shell Command:接收命令文件及相應參數列表,Shell Command 是異步執行的,只有勾選 “Wait until done” 才會等待 Shell 命令執行完在執行調試。
    • Sound:斷點觸發時播放聲音。
  4. Options (Automatically continue after evaluating actions 選項):選中后,表示斷點不會終止程序的運行。

異常斷點

利用 Xcode 進行軟件開發時,總避免不了出現異常而導致程序崩潰,但有時候又不知道哪里出錯,只能利用下斷點一點一點測試,雖然也能測出來但總是不能一步到位。其實 Xcode 有個異常斷點,可以在導致程序崩潰或者引發異常的那行代碼上自動設置斷點。

步驟 1??:(1)打開斷點導航器 -> (2) 點擊下方?號 ->(3)選擇 “Exception Breakpoint”

步驟 2??:按照上述步驟選擇之后,將會看到異常斷點的編輯條件,在這里你可以根據自己的需要編輯自己的異常斷點條件:

Exception?選項可以讓你選擇響應 Objective-C 對象拋出的異常,也可以選擇響應 C++ 對象拋出的異常。?Break?則是選擇斷點所接收的異常,是接收 “Throw” 語句拋出的異常還是 Catch 語句的。

步驟 3??:運行程序,解決問題后。刪除該異常斷點。

符號斷點

Symbolic Breakpoint 為符號斷點,可以針對某一個方法 (函數) 設置斷點并暫停執行;有時候,我們并不清楚會在什么情況下調用某一個函數,那我們可以通過符號斷點來跟蹤獲取調用該函數的程序堆棧。

步驟 1??:如同設置異常斷點一樣,在點擊?之后,選擇 “Symbolic BreakPoint

步驟 2??:編輯要斷點的方法名、條件等。

  • Symbol:填入你想設置斷點的方法(例如:-[NSException raise],- 號是實例方法,+ 號是類方法)。
  • Module:填入要設置斷點的方法或函數是否在位于 dylib 中,默認不填。
  • Conditon:填入條件,例如:(BOOL)[item isEqualToString:@“test”] 前面的(BOOL)是必須的。否則 console 會提示類型不符合,導致條件不能生效。意思是 item(NSString)是 test 時停下。
  • Ignore:忽略幾次。
  • Action:可在程序斷點執行后增加額外動作(Applescript,捕捉動畫幀速,調試器命令(lldb),輸入 log 記錄,終端命令(shell), 播放聲音)例如:Debugger Commond 中可填入?
    • po item 輸出 item 變量的值
    • bt 表示輸出 方法調用堆棧信息

步驟 3??:假如輸入的方法名為:?[UIView init],此時就可以看到新加的斷點方法。

步驟 4??:運行項目,此時 Xcode 會停在你的斷點方法中。

日志輸出

關于日志輸出,最先可能想到的是在代碼編輯區的 NSLog (),雖然在打印的時候很清晰,但是缺點就是在我們需要在想要打印的位置添加 NSLog 代碼并重新運行項目,這樣會比較耽誤時間,影響開發效率,而我們在調試過程中用的比較多的是打斷點,然后 p 或者 po 一下。這個 p 和 po 就是 LLDB 中的打印(print)命令。像下圖中,在 29 行中打了斷點,在下方控制臺的右邊會出現一個 "lldb" 的對話窗。

help 命令

在 lldb 中輸入 help,然后回車,可以看到 lldb 的一些常用的命令,如下圖所例。常用的命令為 po、p、expression、call...

expression 命令

expr 或 e : expression 的縮寫,可以在調試時動態執行指定表達式,并將結果打印出來,是 LLDB 調試命令中最重要的命令,我們以后經常用到的 p 和 po 命令的鼻祖 。expression 命令主要有兩個功能:

  • 執行表達式
  • 輸出返回值

注意:雖然 expression 命令有輸出返回值功能,但是在日常調試過程中并不常用,一般這類打印功能被 p 和 po 命令代替,而 expr 常用于在調試過程中修改變量的值。

?p & print ?& e ?& call 命令

?po 命令

oc?里所有的對象都是用指針表示的,打印出來的是對象的指針,而不是對象本身,可以采用 -o 來打印對象本身為了更加方便的時候,LLDB 為 “expression -o --” ?定了一個別名 :po?,它可用于輸出 OC 對象和對象的信息。

?call 命令

方法調用:在斷點調用某個方法,并輸出此方法的返回值,一般常用于方法的調用

image 命令

常用命令如下:

  • image list:查看工程中使用的庫
  • image lookup:可以用來查找可執行文件或共享庫的原始地址,當程序崩潰的時候,可以使用這條命令來查找崩潰所在的具體位置。

如下代碼:

運行此代碼,崩潰信息如下:

上述 crash 根據調用棧信息如何定位到具體哪行代碼出現問題:

我們可以使用在 LLDB 中使用?image lookup -a 地址??或者 ??image lookup --address 地址?命令進行定位。

通過逐步查看調用棧信息,我們可以看到的是在?-[ContainerViewController viewDidLoad]?方法中也就是在 ContainerViewController.m 文件的第 36 行數組越界導致的崩潰。

?LLDB 調試對話窗

從左到右功能依次詳細介紹:

  1. 顯示 / 隱藏控制臺
  2. 斷點信息:如果為藍色,就是斷點有效。如果點擊它變成灰色,就是所有斷點不起作用。
  3. continue:點擊這個按鈕程序就會從當前斷點恢復運行,直到下一個斷點
  4. step over :點擊這個按鈕會一步一步的運行,方便調試
  5. step in:點擊這個按鈕會進入函數內部
  6. step out:點擊這個按鈕會跳出函數內部,回到函數調用處,一般與左邊的按鈕對應使用
  7. 視圖調試器:查看圖層,在第 2.4 四節中詳細介紹
  8. 內存結構圖(menory graph):方便查看堆棧信息
  9. 覆蓋調試器的環境變量設置
  10. 模擬器定位開關

性能檢測

靜態分析:通過對代碼靜態分析,找出代碼潛在的錯誤,如內存泄漏、空引用、未使用函數等。方法:菜單 “Product"->"Analyze" 或者使用快捷鍵 ?Shift + Command + B ,然后想辦法消滅藍箭頭。

具體參考我的這篇博客:

heap memory with Xcode-CSDN博客

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39768.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

140. 好二叉樹(卡碼網周賽第二十四期(23年騰訊音樂筆試真題))

140. 好二叉樹&#xff08;卡碼網周賽第二十四期&#xff08;23年騰訊音樂筆試真題&#xff09;&#xff09; 題目描述 小紅定義一個二叉樹為“好二叉樹”&#xff0c;當且僅當該二叉樹所有節點的孩子數量為偶數(0 或者 2)。 小紅想知道&#xff0c;n&#xff08;1< n <…

vue table表格 ( parseTime-格式化時間)

<el-table-column label"發布時間" width"420px" prop"bidPublishDatetime"><template slot-scope"scope"><span>{{ parseTime(scope.row.bidPublishDatetime, {y}-{m}-{d}) }}</span></template></…

若依代碼生成

在若依框架中&#xff0c;以下是這些代碼的作用及它們在程序運行中的關聯方式&#xff1a; 1. domain.java&#xff1a;通常用于定義實體類&#xff0c;它描述了與數據庫表對應的對象結構&#xff0c;包含屬性和對應的訪問方法。作用是封裝數據&#xff0c;為數據的操作提供基…

Richtek立锜科技車規級器件選型

芯片按照應用場景&#xff0c;通常可以分為消費級、工業級、車規級和軍工級四個等級&#xff0c;其要求依次為軍工>車規>工業>消費。 所謂“車規級元器件”--即通過AEC-Q認證 汽車不同于消費級產品&#xff0c;會運行在戶外、高溫、高寒、潮濕等苛刻的環境&#xff0c…

澳藍榮耀時刻,6款產品入選2024年第一批《福州市名優產品目錄》

近日&#xff0c;福州市工業和信息化局公布2024年第一批《福州市名優產品目錄》&#xff0c;澳藍自主研發生產的直接蒸發冷卻空調、直接蒸發冷卻組合式空調機組、間接蒸發冷水機組、高效間接蒸發冷卻空調機、熱泵式熱回收型溶液調濕新風機組、防火濕簾6款產品成功入選。 以上新…

飛利浦的臺燈值得入手嗎?書客、松下多維度橫評大分享!

隨著生活品質的持續提升&#xff0c;人們對于健康的追求日益趨向精致與高端化。在這一潮流的推動下&#xff0c;護眼臺燈以其卓越的護眼功效與便捷的操作體驗&#xff0c;迅速在家電領域嶄露頭角&#xff0c;更成為了眾多家庭書房中不可或缺的視力守護者。這些臺燈以其精心設計…

(vue)eslint-plugin-vue版本問題 安裝axios時npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本問題 安裝axios時npm ERR! code ERESOLVE 解決方法&#xff1a;在命令后面加上 -legacy-peer-deps結果&#xff1a; 解決參考&#xff1a;https://blog.csdn.net/qq_43799531/article/details/131403987

【C語言】指針剖析(完結)

©作者:末央&#xff06; ©系列:C語言初階(適合小白入門) ©說明:以凡人之筆墨&#xff0c;書寫未來之大夢 目錄 回調函數概念回調函數的使用 - qsort函數 sizeof/strlen深度理解概念手腦并用1.sizeof-數組/指針專題2.strlen-數組/指針專題 指針面試題專題 回調函…

云服務器linux系統安裝配置docker

在我們拿到一個純凈的linux系統時&#xff0c;我需要進行一些基礎環境的配置 &#xff08;如果是云服務器可以用XShell遠程連接&#xff0c;如果連接不上可能是服務器沒開放22端口&#xff09; 下面是配置環境的步驟 sudo -s進入root權限&#xff1a;退出使用exit sudo -i進入…

process.env.VUE_APP_BASE_API

前端&#xff1a;process.env.VUE_APP_BASE_API 在Vue.js項目中&#xff0c;特別是使用Vue CLI進行配置的項目&#xff0c;process.env.VUE_APP_BASE_API 是一個環境變量的引用。Vue CLI允許開發者在不同環境下配置不同的環境變量&#xff0c;這對于管理API基礎路徑、切換開發…

MySQL調優的五個方向

客戶端與連接層的優化&#xff1a;調整客戶端DB連接池的參數和DB連接層的參數。MySQL結構的優化&#xff1a;合理的設計庫表結構&#xff0c;表中字段根據業務選擇合適的數據類型、索引。MySQL參數優化&#xff1a;調整參數的默認值&#xff0c;根據業務將各類參數調整到合適的…

【leetcode78-81貪心算法、技巧96-100】

貪心算法【78-81】 技巧【96-100】

谷粒商城-個人筆記(集群部署篇二)

前言 ?學習視頻&#xff1a;?Java項目《谷粒商城》架構師級Java項目實戰&#xff0c;對標阿里P6-P7&#xff0c;全網最強?學習文檔&#xff1a; 谷粒商城-個人筆記(基礎篇一)谷粒商城-個人筆記(基礎篇二)谷粒商城-個人筆記(基礎篇三)谷粒商城-個人筆記(高級篇一)谷粒商城-個…

【數據結構】02.順序表

一、順序表的概念與結構 1.1線性表 線性表&#xff08;linear list&#xff09;是n個具有相同特性的數據元素的有限序列。線性表是?種在實際中廣泛使用的數據結構&#xff0c;常見的線性表&#xff1a;順序表、鏈表、棧、隊列、字符串… 線性表在邏輯上是線性結構&#xff0…

GEE計算遙感生態指數RSEI

目錄 RESI濕度綠度熱度干度源代碼歸一化函數代碼解釋整體的代碼功能解釋:導出RSEI計算結果參考文獻RESI RSEI = f (Greenness,Wetness,Heat,Dryness)其遙感定義為: RSEI = f (VI,Wet,LST,SI)式中:Greenness 為綠度;Wetness 為濕度;Thermal為熱度;Dryness 為干度;VI 為植被指數…

【多媒體】Java實現MP4和MP3音視頻播放器【JavaFX】【音視頻播放】

在Java中播放音視頻可以使用多種方案&#xff0c;最常見的是通過Swing組件JFrame和JLabel來嵌入JMF(Java Media Framework)或Xuggler。不過&#xff0c;JMF已經不再被推薦使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不適用于跨平臺。而且上述方案都需要使用第三方庫…

拒絕信息差!一篇文章說清Stable Diffusion 3到底值不值得沖

前言 就在幾天前&#xff0c;Stability AI正式開源了Stable Diffusion 3 Medium&#xff08;以下簡稱SD3M&#xff09;模型和適配CLIP文件。這家身處風雨飄搖中的公司&#xff0c;在最近的一年里一直處于破產邊緣&#xff0c;就連創始人兼CEO也頂不住壓力提桶跑路。 即便這樣&…

[leetcode]minimum-absolute-difference-in-bst 二叉搜索樹的最小絕對差

. - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(null…

java如何在字符串中間插入字符串

java在字符串中插入字符串&#xff0c;需要用到insert語句 語法格式為 sbf.insert(offset,str) 其中,sbf是任意字符串 offset是插入的索引 str是插入的字符串 public class Insert {public static void main(String[] args) {// 將字符串插入到指定索引StringBuffer sbfn…

FFmpeg5.0源碼閱讀——格式檢測

摘要&#xff1a;在拿到一個新的格式后&#xff0c;FFmpeg總是能夠足夠正確的判斷格式的內容并進行相應的處理。本文在描述FFmpeg如何進行格式檢測來確認正在處理的媒體格式類型&#xff0c;并進行相應的處理。 ??關鍵字&#xff1a;FFmpeg,format,probe 在調用FFmpeg的APIav…