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:

详细使用方法参见:应用 Valgrind 发现 Linux 程序的内存问题 和 linux使用valgrind 工具检查内存泄露两篇文章

实例现象篇

....

...

qt内存泄漏检测_qt 关于内存泄漏的检测相关推荐

  1. 用V C++检测和隔离内存泄漏

    具有动态的分配和释放内存的能力是C/C++程序语言的重要特色之一.Visual C++ debugger 和 CRT库提供了一系列有效的检测和鉴定内存泄漏的工具. 设置内存泄漏检测 检测内存泄漏的基本 ...

  2. 如何检测和处理内存泄漏

    四. 如何检测和处理内存泄漏 如何查找引起内存泄漏的原因一般有两个步骤:第一是安排有经验的编程人员对代码进行走查和分析,找出内存泄漏发生的位置;第二是使用专门的内存泄漏测试工具进行测试. 第一个步骤: ...

  3. Android检测App的内存占用和泄漏

    这次问题使我明白,别以为Android程序是基于Java 语言,有强大的垃圾回收机制,就完全不用担心内存问题,其实Android程序也要特别小心你的内存,因为毕竟手机不比PC机,内存是极其有限的,在内 ...

  4. 【内存】内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind

    简介 Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Saniti ...

  5. 什么是内存泄漏?怎么产生的?如何检测?

    1.什么是内存泄漏(Memory Leak)?    简单地说就是申请了一块内存空间,使用完毕后没有释放掉.它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃.由程序申请 ...

  6. linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)

    内存泄漏是指由于疏忽或错误造成程序未能释放已经不再使用的内存.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存 ...

  7. 内存泄露严重吗_内存泄漏–测量频率和严重性

    内存泄露严重吗 这篇文章是我们开放文化的一部分-我们将继续分享日常工作中的见解. 这次,我们窥视了我们价值主张的核心,即–寻找以下问题的答案: Java应用程序中内存泄漏多久发生一次? 内存泄漏有多大 ...

  8. android 内存分析 郭霖_android 内存泄漏(OOM)问题总结

    对于Java来说,就是new出来的Object 放在Heap上无法被GC回收 Paste_Image.png Context Context Context类本身是一个纯abstract类,它有两个具 ...

  9. spark如何防止内存溢出_什么叫内存溢出?内存泄漏的定义又是什么?使用中如何避免?...

    一.基本概念 内存溢出:简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存,于是就发生了内存溢出. 内存泄漏:内存泄漏指程序运行过程中分配内存给临时变量,用 ...

最新文章

  1. 语言生成不自闭迷宫_4招教你分清自闭症、多动症、发育迟缓、抑郁症的区别...
  2. 如何画好科技论文中的插图
  3. IDEA打包成可执行的JAR包
  4. matlab 高斯一阶导,将Matlab高斯导数转换为Opencv
  5. Java PushbackInputStream markSupported()方法与示例
  6. 4、requests-基础
  7. 05.序列模型 W3.序列模型和注意力机制
  8. c++——抽象类以及string知识点补充
  9. java两个字符串 相隔天数_关于Java: Joda-Time时间中两个日期之间的天数
  10. wpf 图片绝对路径引用_Python Pillow 图片处理
  11. Flink WatermarkKeyed
  12. ThreadLocal类的实现用法
  13. JAVA中GridBagLayout布局管理器应用详解
  14. 跑腿源码之外卖人v9.1_9.2的升级过程For 9.0及小程序及(客户端,配送端,商户端)的二次编译方法
  15. Python format 格式化输入字符对不齐解决
  16. C# DES解密异常问题
  17. 计算机可以实现u盘和硬盘格式化,“资源管理器”和“计算机”窗口都可以实现U盘和硬盘格式化...
  18. 李宏毅机器学习2021作业7-Bert (Question Answering)
  19. qt在4k屏幕上不能完整显示分辨率不到4K的应用程序
  20. [日常技能]手机投屏到电视的5种方法

热门文章

  1. HttpClient使用不当,服务挂了!是时候系统学习一下了
  2. 中专学计算机室内设计,室内设计专业在中职教育学校中的发展潜力
  3. POI设置Excel单元格样式和背景色
  4. Windows10安装Mac OS系统
  5. 此电脑下的默认7个文件夹路径修改
  6. 在移动硬盘/固态/U盘上安装ubuntu 实现 ubuntu to go
  7. 数据编织 (Data Fabric) vs 数据网格 (Data Mesh)
  8. 5款开发手机应用的傻瓜式APP开发工具
  9. JAVA复健DateNote.001
  10. 退化过程及模型的简单介绍