qt記憶體洩漏檢測 qt 關於記憶體洩漏的檢測

2021-10-13 10:24:42 字數 2048 閱讀 8009

qt 關於記憶體洩露的檢測:

工具篇關於qt 記憶體洩露的檢測工具有很多種,一下挑幾種來說:

1、檢測已分配資源, 第乙個工具是乙個記憶體資源使用的***.它只能在模擬器上進行除錯.可以使用快捷鍵來呼叫

按鍵 功能

ctrl+alt+shift+a 顯示已分配堆單元的數量

ctrl+alt+shift+b 顯示已分配的檔案伺服器資源的數量

ctrl+alt+shift+c 顯示已分配的視窗伺服器資源的數量

2、堆檢測巨集,第二個工具可以在你指定的**塊中檢測記憶體的分配情況.只需要把這些巨集加入你要檢測的**部分即可:

巨集 功能

__uheap_mark 開始檢測堆的使用狀況

__uheap_check(n) 檢測自上乙個__uheap_mark是否有』n』個堆被分配(尚未釋放)

__uheap_checkall(n) 檢測是否有』n』個堆已分配

__uheap_markend 檢測結束,並檢測在__uheap_mark之後有沒有未被釋放的堆

__uheap_markendc(n) 檢測結束,並檢測在__uheap_mark之後有無』n』個未被釋放的堆

簡單示例:

這是乙個簡單的使用示例

gldef_c tint e32main()

__uheap_mark;

ctrapcleanup* cleanupstack=ctrapcleanup::new();

// 在堆檢測過程中捕獲所有可能發生的異常

trapd(error,consolemainl());

__assert_always(!error,user::panic(_l("pep"),error));

delete cleanupstack;

__uheap_markend;

return 0;

__uheap_check(2); //檢測在__uheap_mark之後有2個堆單元被分測(a2,a3)

__uheap_checkall(3); //檢測三個堆已被分配(a1,a2,a3)

delete(a2);

__uheap_markend; // 結束檢測,a3記憶體洩露

3、使用hooklogger檢測工具

安裝方法 傳送門

具體使用方法 傳送門

4、使用valgrind檢測工具

valgrind是一款非常強大的工具**,它包含有包括記憶體檢測、cpu監測等多種工具,其中最常用的是記憶體檢測功能,它能監測出以下的各種記憶體錯誤:

1. 訪問非法記憶體區域

2. 使用未被初始化的記憶體區域

3. 非法釋放記憶體,比如多次free乙個記憶體

4. 記憶體洩露

小試牛刀:

valgrind記憶體檢測中五種記憶體丟失的解釋

結果示例:

leak summary:

definitely lost: 140 bytes in 5 blocks.

indirectly lost: 1,252 bytes in 41 blocks.

possibly lost: 0 bytes in 0 blocks.

still reachable: 36 bytes in 1 blocks.

suppressed: 0 bytes in 0 blocks.

1) still reachable: 表示****存在程式執行完的時候,仍舊有指標指向它,因而,這種內存在程式執行結束之前可以釋放。一般情況下valgrind不會報這種洩漏,除非使用了引數 –show-reachable=yes。

2) definitely losg: 明確地已經洩漏了,因為在程式執行完的時候,沒有指標指向它, 指向它的指標在程式中丟失了。一般這種洩漏常見,而且比較難發現問題所在。

3) indirectly lost: 間接地 ????????????????

4) possibly lost: 發現了乙個指向某塊記憶體中部的指標,而不是指向記憶體塊頭部。這種指標一般是原先指向記憶體塊頭部,後來移動到了記憶體塊的中部,還有可能該指標和該記憶體根本就沒有關係,檢測工具只是懷疑有記憶體洩漏。

5) suppressed:

例項現象篇

qt記憶體洩漏檢測 qt 關於記憶體洩漏的檢測

qt 關於記憶體洩露的檢測 工具篇關於qt 記憶體洩露的檢測工具有很多種,一下挑幾種來說 1 檢測已分配資源,第乙個工具是乙個記憶體資源使用的 它只能在模擬器上進行除錯.可以使用快捷鍵來呼叫 按鍵 功能 ctrl alt shift a 顯示已分配堆單元的數量 ctrl alt shift b 顯示...

qt記憶體洩漏檢測 VLD記憶體洩漏檢測工具

vld記憶體工具可以為每個洩漏的塊提供完整的堆疊跟蹤,包括原始檔和行號資訊,從而快速找到記憶體洩漏點。注 僅支援windows平台。在main.cpp中新增 include後以除錯模式執行即可檢測記憶體洩漏。include int main int argc,char ar main.cpp 5 l...

記憶體洩漏檢測

一 記憶體洩漏 記憶體洩漏是程式設計中常常見到的乙個問題.記憶體洩漏往往會一種奇怪的方式來表現出來,基本上每個程式都表現出不同的方式.但是一般 最後的結果只有兩個,乙個是程式當掉.乙個是系統記憶體不足.還有一種就是比較介於中間的結果程式不會當,但是系統的反映時間明顯降低,需要定時的 reboot才會...