使用Xcode Instruments定位APP穩定性問題


    Xcode Instruments提供了各種各樣的工具用來定位APP的各種穩定性問題。這里簡單總結幾個問題:

1. 內存泄漏

    Xcode->Open Developer Tools->Instruments->Leak,打開后點擊運行。執行測試流程后,如果沒有內存泄漏,則Leak工具顯示的是√,如果有泄漏,則顯示×。

    這時候選中×的區域,則Leaks欄選擇Call Tree,選中"Invert Call Tree", "Hide System Libraries",即可顯示泄漏的堆棧。如果沒有顯示符號堆棧,則檢查Product->Scheme->Edit Scheme,看目前是否是Debug狀態,同時查看項目的Build Settings->Debug Information Format,看是否是DWARF with dSYM File,該文件主要是一些符號信息。如果還是不顯示堆棧,可以點擊File->Symbols手動選擇Symbol的路徑。

    定位內存泄漏是一回事,還要分析為什么會出現內存泄漏,是調用者調用的問題,還是類設計者設計存在問題,比如沒有遵循誰申請誰釋放的原則。

2. 內存越界

     內存越界往往會造成一些匪夷所思的crash。Xcode可以按如下方法來檢測內存越界:

a, Debug->Breakpoints->Create Symbolic Breakpoints, Symbols輸入malloc_error_break;

b, Product->Scheme->Edit Scheme,選中Memory Management中的Malloc Scribble, Malloc Guard Edges, Guard Malloc, Zombie Objects. With that, run your application again, and Xcode will stop at the line causing the problem.

    Instruments提供了Zombies工具,該工具會記錄每個被釋放的內存塊,當再次訪問該內存塊時,Xcode會直接提示出現問題的調用堆棧。

3. 高CPU占用

    有時候APP很卡,原因是CPU過載,有些線程過度使用了CPU。高CPU占用有兩個危害,一個是壞的用戶體驗,另外一個是ios系統會將連續一段時間高頻使用CPU的APP直接殺死。使用Instruments中的time profile即可定位。Xcode->Open Developer Tools->Instruments->time profiler,打開后點擊運行。執行測試流程后,CPU占用率顯示曲線,橫軸是時間,縱軸是CPU使用率。這時候鼠標選中使用率高的區域,界面就會顯示使用率高的線程調用,及函數調用。

    這個時候就要分析為什么這些函數耗費了過多的CPU,有些函數本身就耗費很多CPU,比如寫磁盤,讀網絡數據等IO操作;有時候是一些程序寫法存在問題。比如最近發現的主APP中兩個高CPU占用的問題:

a, 音視頻數據隊列采用了vector實現,而且每來一個數據,執行的是push_front,而不是push_back,造成CPU利用率隔一段時間就出現一個尖峰,是vector在執行realloc和copy操作,改為std::list后不再出現。

b, 讀取音視頻隊列的關鍵線程加進了一些無意義的查詢數據語句,每讀一個數據包查詢一次,白白浪費了很多CPU。

    還有一些APP卡頓是GPU過載,需要使用Core Animation定位。除了以上幾個工具,Energy Log用來分析電量,Network用來進行流量分析。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM