Xcode自帶的超好用的診斷工具

2021-09-11 11:16:18 字數 1830 閱讀 9013

知識小集 github

xcode已經為我們準備了十分豐富的編譯警告,儘管這些警告不會導致編譯不過,但是背後一定沒有無緣無故的恨。請正確對待所有警告,避免在執行時產生一些讓你感到難以捉摸的現象,treat warnings as errors也不失為乙個不錯的選擇。如果你對某些警告有絕對的自信,可以通過修改build settings裡的warnings選項,或者在提示警告的**處新增diagnostic ignore來消除它們。隨著xcode的不斷更新,你還應該通過工程檔案的editor-validate settings來將工程配置選項改為最優。

很早以前xcode就已經為我們提供了靜態檢測工具,用它可以檢測一系列難以發現的問題,例如記憶體洩露、邏輯錯誤、未使用的變數和未包含的庫等。對於很多專案而言,完整的跑一次analyze會花費較長的時間,也許是因為這一點,這項工具被越來越多的開發者忽視掉。你可以通過修改build settings裡的analyze during 'build'在平時開發除錯的過程中即時地進行analyze。

除了編譯警告和analyze,蘋果還為我們提供了更多的動態除錯工具。它們分散在xcode的各個角落,與我們日常開發息息相關,潤物細無聲。

###process debug

xcode為我們提供了四種程序除錯:

除了xcode在早期為我們提供的guard malloczombie objects等,在最近兩個版本中先後引入的sanitizersmain thread checker進一步完善了開發過程中的檢測工具。

對於mrc環境下的oc來講,在乙個物件被釋放之後再去對它進行操作會觸發crash;進入arc時代之後,我們越來越少地去關心這個問題。但當你使用core foundation,或者混編c\c++的時候,這個問題會表現得不可預料。當一片記憶體區域被釋放之後,在該區域被重新分配之前去訪問它不會出現問題,這就帶來了很大的隨機性。除此之外,如果你在使用指標訪問記憶體的時候不小心越了界,帶來的後果也是不可預料的。對於這些問題,xcode提供了address sanitizer來更有力地進行檢測。

以往,data race的問題是十分難定位和排查的,因為它帶來的問題往往是不可預期的。xcode通過記錄每次記憶體訪問的時間等資訊,在每次訪問記憶體的時候進行檢測。在日常開發除錯過程中你可以選擇性地開啟這項工具,但是在單元測試中,應當考慮開啟它,若你的用例覆蓋度較高,它可能可以為你發現絕大部分多執行緒資料競爭的問題。

未定義行文檢測,比如說除以 0,載入記憶體對其指標、非關聯乙個空指標等。有可能引發crash也可能不crash,具體情況和編譯器有關係,但是我們應該避免這種事情的發生。

值得一提的是,由於address sanitizerguard malloczombie objects的實現原理直接或間接地影響了執行時物件的記憶體管理,若開啟了這些診斷工具,debug gauges中的memory一項會失效。

Xcode 自帶svn的使用

xcode自帶svn的使用 1 中 某檔案後面有 m 標記,表示該檔案已被修改,需要commit.右鍵該檔案 source control commitselected file.2 中 某檔案後面有 a 標記,表示該檔案是新新增的,已受svn管理,需要commit.右鍵該檔案 source con...

常見的GIT命令超好用

git clone 遠端倉庫位址git commit 會遇到的問題 可能需要我們配置config gitconfig global user email 登入郵箱 gitconfig global user name 提交記錄的使用者名稱 一般需要上傳 所用到的命令 git status 檢視倉庫的...

reduce,自帶遍歷的超實用方法

arr.reduce function prev,cur,index,arr init 其中,arr表示原陣列 prev表示上一次呼叫 時的返回值,或者初始值 init cur表示當前正在處理的陣列元素 index表示當前正在處理的陣列元素的索引,若提供 init 值,則索引為0,否則索引為1 in...