Instruments是動態分析工具,它與Xcode集成在一塊兒,能夠在Xcode中經過菜單Product→Profile啓動。啓動如圖所示,Instruments有不少跟蹤模板能夠動態分析和跟蹤內存、CPU和文件系統。
html
每一個跟蹤模板都有不一樣的用途,其中Leaks能夠檢測內存泄漏點,Allocations跟蹤模板能夠查看內存的使用狀況。下面咱們經過一個實例介紹一些Instruments工具的使用,咱們來人爲製造一個內存泄漏,咱們在HelloWorldScene.cpp中修改代碼:
微信
[html] view plaincopy框架
bool HelloWorld::init() 函數
{ 工具
if ( !Layer::init() ) 網站
{ spa
return false; .net
} code
__String *s = new __String(); orm
log("%s",s->getCString());
… …
return true;
}
咱們在代碼中添加了__String *s = new __String()語句,使用new關鍵字分配內存,然而直到init函數結束咱們都沒有使用delete s語句釋放它。這樣的語句會致使內存泄漏。
首先啓動Instruments工具,在圖對話框中選擇Leaks跟蹤模板,點擊按鈕Profile進入如圖所示界面。
在Instruments中,雖然選擇了Leaks模板,但默認狀況下也會添加Allocations模板。基本上凡是分析內存都會使用Allocations模板,它能夠監控內存分佈狀況。選中Allocations模板(圖中①區域),右邊的③區域會顯示隨着時間的變化內存使用的折線圖,同時在④區域會顯示內存使用的詳細信息,以及對象分配狀況。點擊Leaks模板(圖中②區域),能夠查看內存泄漏狀況,如圖20-3所示,若是在③區域有紅線出現,則有內存泄漏,④區域則會顯示泄漏的對象。
點擊上圖中出現的泄漏點(紅線)在④區域打開詳細界面,以下圖所示,能夠發現一個cocos2d::__String對象,能夠看到它的內存地址、佔用字節、所屬框架和所屬函數等信息。
點擊工具欄View中的按鈕,打開擴展詳細視圖,如圖20-5所示,能夠看到右邊的跟蹤堆棧信息,其中圖標所示的條目是咱們本身應用的代碼,雙擊HelloWorld::init()可進入程序代碼,如圖所示。
圖所示的第33行代碼就是泄漏點程序代碼了,咱們從中不難發現問題。
若是咱們想進一步評估它對於內存的佔用狀況,能夠看看Allocations模板的折線圖。從圖中看到,各類變量的使用內存佔用狀況,也能夠知道某個時刻的內存佔用狀況。4號區域是Heap(堆)內存佔用狀況,由於堆內存須要人爲釋放,而棧內存不用人爲管理。
事實上,內存泄漏是極其複雜的問題,工具使用是一方面,經驗是另外一方面。提升經驗,而後藉助於工具纔是解決內存泄漏的根本。
更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》
本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com
歡迎加入Cocos2d-x技術討論羣:257760386
歡迎關注智捷iOS課堂微信公共平臺