使用 VisualStudio 診斷工具 解決 c++ 項目的內存泄漏

今天瞭解了一下 VisualStudio “診斷工具”,感覺非常好用,甚至強過xcode 的 instrument 的泄漏檢查工具。趁熱記錄一下經驗感受。

應用場景

今天同事反應,我們的遊戲每一局新開一把,內存都會飆升幾十兆。反覆開幾把,內存會飆到1.5G然後掛掉。光聽現象很明顯是發生了內存泄漏。 本來打算找一些 windows 平臺的工具來檢查。由於我們項目使用的是 Vistual Studio 2015,自帶了 "診斷工具"功能。之前也沒有用過,打算用這個診斷工具,來檢查一下項目裏 c++ 代碼的內存泄漏。

功能簡介

在Debug模式下運行遊戲工程,打開"診斷工具"的"內存使用率"標籤頁,可以開啓內存檢測。點擊了"堆分析"按鈕後,遊戲會奇卡無比。針對我們項目上面所說的情況,我打算在每局遊戲截取內存快照,退出一局遊戲在同樣的時機再截取一次內存快照。比較兩次快照的結果,來定位泄漏的代碼。

截取快照

遊戲運行以斷時間之後,點擊“截取快照”按鈕,可以新增一條一個時刻的內存使用情況的數據。
在這裏插入圖片描述

快照比較

截取多個內存使用數據之後,點擊某一個,可以與之前的數據比較。
在這裏插入圖片描述

快照分析

互相比較之後,可以看到哪些類型的對象有所增加,能增加了多少字節。
也可以用堆棧的形式,來看哪行代碼在申請內存沒有釋放,有導致泄漏的嫌疑。

堆棧裏面的每一行都能點擊,能夠清楚的看到哪些對象是由哪行代碼構造出來造成泄漏的。
在這裏插入圖片描述

經驗總結

最終我們遊戲的泄漏是發生在最近的一個腳本底層的C++ 代碼的改動,在某一處 new [] 了一些對象,而沒有 delete[] 幹掉導致的。

VisualStudio2015 自帶的內存使用率分析工具非常好用,可以完全不去用 VLD 等等之類的第三方軟件了。
個人的直觀感受比 xcode 的 instrument 的 leak 工具還要方便。
新版的 VS2017, VS2019 的診斷工具又有了什麼變化不得而知,有機會要去了解一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章