1. 程式人生 > >iOS開發-追蹤異常、除錯、檢查記憶體洩漏

iOS開發-追蹤異常、除錯、檢查記憶體洩漏

1、      單步跟蹤(Step)

所謂單步跟蹤是指一行一行地執行程式,每執行一行語句後就停下來等待指示,這樣你就能夠仔細瞭解程式的執行順序,以及當時的各種狀況。

2、       斷點(Breakpoint)

只要在需要暫停的地方設定一個斷點,然後讓程式執行,當執行到這個斷點位置時不需要使用者干預就會暫停並返回整合除錯程式.斷點必須位於可執行程式碼行上,凡設定在註釋,空白行,變數說明上的都是無效的。另外,斷點既可以在設計狀態下設定也可以在執行除錯狀態下設定。根據斷點除錯找到錯誤處。在程式開發中,為了找到程式的bug,通常採用的一種除錯手段,一步一步跟蹤程式執行的流程,根據變數的值,找到錯誤的原因。

在需要除錯的程式碼斷設定斷點,然後按預設的快捷鍵步進。除錯狀態執行程式,程式執行到有斷點的地方會停下來。

3記憶體洩漏

一般我們常說的記憶體洩漏是指堆記憶體的洩漏。

31 iPhone程式開發中,使用NSLog直接在控制檯印出retainCount也是一個檢視記憶體洩漏的方法

3、2 instruments leaks工具檢測記憶體洩漏

iOS 5.0之後apple引入了Xcode編譯器特性ARC來幫助開發者管理記憶體,但為了追求app的高效能與減少安裝包大小,工作中很多時候需要我們手動管理記憶體。再牛的開發者也不能保證自己寫的code 100%沒有記憶體洩露

下面就講解xcode中的記憶體除錯神器---Instruments Leak ,不管是ios開發菜鳥,還是有經驗的開發者,使用Instruments Leak除錯記憶體洩露是必備技能之一。

1、     分析記憶體洩露(shift+command+b)

app不crash了,那看看有沒有記憶體洩露。用XCode的Analyze就能分析到哪裡有記憶體洩露

2、使用Instruments的leaks工具

1)分析記憶體洩露不能把所有的記憶體洩露查出來,有的記憶體洩露是在執行時,使用者操作時才產生的。那就需要用到Instruments了。

2)build成功後跳出Instruments工具,選擇Leaks選項,這時候壽司程式也執行起來了,選中list中的項,拖動等操作後,工具顯示效果如下

紅色的柱子表示記憶體洩露了。怎麼通過這個工具看到在哪洩露了呢?

3)先在工具欄按下紅色的圓形按鈕,把工具監視記憶體的活動停下來。選擇Leak

,然後點中間十字交叉那,選擇Call Tree.

4)這時候左下角的Call Tree的可選項可以選了。選中InvertCall Tree 和Hide System Libraries,顯示如下:

這時候記憶體洩露的具體程式碼找到了,在右邊的紅色框框裡指定了哪個方法出現了記憶體洩露。

5)你只要在這些方法上雙擊,就會跳轉到具體的程式碼,哈哈,是不是很方便。

二、常見錯誤

1.Objective-CEXC_BAD_ACCESS

EXC_BAD_ACCESS 這個錯誤,可以這麼說,90%的錯誤來源在於對一個已經釋放的物件進行release操作。

造成這個錯誤,存在兩種原因:

1.    專案未新增一個 CoreData  framework

2.   由於某個或某幾個.m檔案沒有被標記(打鉤)的原因造成的解決方法是將與伺服器端衝突的幾個先在專案中刪除,然後再將刪除的檔案重新拖拽到xcode中,注意在新增檔案是要記得打鉤

三、上線異常追蹤—Bugly

這些在開發階段都能很簡便的實現, 但是當app釋出出去後用戶發生crash? 一般使用者只能反饋在做什麼的時候發生crash,然後我們在去做嘗試是否能遇到, 不過這樣效率不高而且一般很難復現到使用者的crash.

Bugly解決這個問題:

Bugly SDK在當程式崩潰時, 會自動將錯誤資訊傳送到伺服器方便開發人員檢視分析;

那麼如何使用Bugly?( https://bugly.qq.com/docs/introduction/bugly-introduction/?v=20170322165254#_3)

應用整合SDK後,即可在Web站點檢視應用上報的崩潰資料和聯網資料。檢視今日實時統計、崩潰趨勢、崩潰排行和TOP20崩潰問題等資訊

騰訊Bugly,為移動開發者提供專業的異常上報和運營統計,幫助開發者快速發現並解決異常,同時掌握產品運營動態,及時跟進使用者反饋。

http://bbs.9ria.com/thread-183991-1-1.html

http://www.cocoachina.com/ios/20150701/12301.html