内存检测工具——Qt Creator
前言
检测内存错误的工具,有很多个,我今天粗浅的学了一下可在Qt上使用的工具们:
- Dr.Memory 工具之前我曾在关注的博主上看到相关的博客:C++(Qt)软件调试---内存调试器Dr.Memory(21)_dr. memory-CSDN博客
今天尝试了一下,不尽人意。
- Heob 工具是Qt Creator 的工具栏【分析】下的菜单项有此选项,然后学习了下,简单测试了下,定位是准确的。
- Vargrind 是用于检测Linux环境内存泄漏的工具。由于当前开发环境是Windows,所以并未测试此工具的可行性。
环境
win10 + QtCreator 5.15.2 MSVC2019 32bit
工具
Dr.Memory 与 Heob的优劣比较
Dr.Memory和Heob各有优缺点,适用于不同的场景和需求。
Dr.Memory
优点:
- 开源免费:Dr.Memory是一个开源工具,用户可以免费使用。
- 跨平台支持:它支持Windows、Linux等多个操作系统,具有较好的兼容性。
- 性能较好:相比其他同类工具,Dr.Memory在性能上更有优势,检测速度较快。
- 功能丰富:除了内存泄漏检测,还可以检测内存越界、重复释放内存、空指针、野指针、堆栈溢出等问题。
缺点:
- 有时仍较慢:尽管比其他工具快,但在某些情况下仍然较慢。
Heob
优点:
- 集成度高:Heob特别适用于Qt Creator,可以很好地与Qt开发环境集成,使用方便。
- 开源免费:Heob是一个开源工具,用户可以免费使用。
缺点:
- 平台限制:Heob主要适用于Windows平台,不适用于其他操作系统。
- 功能限制:Heob只能检测动态链接库中的内存泄漏问题,对于其他类型的内存问题检测能力有限。
Dr.Memory
下载地址:
Download
https://drmemory.org/page_download.htmlhttps://github.com/DynamoRIO/drmemory/releases
https://github.com/DynamoRIO/drmemory/releases在当前的环境下,尝试了以下版本:

2.6.0 版本使用时,直接报错,无法打开安装目录下的某个文件,我直接去指定目录下查看了下,并没有此文件或文件夹。
2.5.0 和 2.4.18900版本 运行时并没报错,直接用Qt创建的项目,未有任何错误,它却指向main.cpp:7可能存在内存泄漏,但是源码此处只初始化了平台。

如果以上只是误报,其他地方的内存泄漏可以检测出来也是可以的,但是并没有,我在后面添加了超级明显的内存泄漏(如下图),但是它还是只是指向了main.cpp:7,其他无任何错误。我将其写到其他类中仍是如此。

然后我将main函数中平台初始化(之前报错)去掉,留下剩余的。

检测结果如下:

涉及的代码:

可看出除了第三处错,其他两处都是qt的源代码,而源代码几乎不可能有错。
结论:感觉Dr.Memory与当前Qt不太适配,起码这三个版本都不适用于当前环境。所以,它目前无用,内存检测指向不准确 。
Heob
下载地址:
Releases · ssbssa/heob · GitHub
Heob应该说属于官方推荐的内存检测工具,如下为官网的介绍,
Heob | Qt Creator Documentation
可通过下方博客进行配置和试用。
QtCreator使用Heob进行程序内存泄漏检测 - 韭菜钟 - 博客园
本地仍是用以上代码作为示例进行测试,可看出明确检测出内存泄漏的位置。可通过“漏斗”进行筛选。其他检测出的问题只能自行判断了。
结论:Heob操作简单,轻量级,可准确定位出内存泄漏位置,再加上Qt官网推荐使用,所以用这个工具没毛病。
相关文章:
内存检测工具——Qt Creator
前言 检测内存错误的工具,有很多个,我今天粗浅的学了一下可在Qt上使用的工具们: Dr.Memory 工具之前我曾在关注的博主上看到相关的博客:C(Qt)软件调试---内存调试器Dr.Memory(21)_dr. memory-CSDN博客 今…...
2.4 基于Vitest的单元测试基础设施搭建
文章目录 1. 现代单元测试体系解析测试金字塔演进Vitest核心定位2. 基础设施架构设计整体架构图3. 环境配置全流程3.1 基础环境搭建3.2 配置文件`vitest.config.ts`3.3 测试环境初始化4. 测试用例编写规范4.1 基础测试示例4.2 Vue组件测试4.3 异步逻辑测试5. Mock策略深度优化5…...
如何在 React 中使用 CSS-in-JS?
在 React 中使用 CSS-in-JS CSS-in-JS 是一种将 CSS 样式与 JavaScript 代码结合在一起的技术,特别流行于 React 应用中。它允许开发者在组件内部定义样式,使得样式与组件逻辑紧密结合,从而提高了可维护性和可读性。本文将深入探讨在 React …...
⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)
文章目录 148. Sort List解题思路归并排序的基本思想归并排序的步骤 实现实现步骤C 实现JavaScript 实现 复杂度总结 148. Sort List Given the head of a linked list, return the list after sorting it in ascending order. 解题思路 链表排序问题可以通过多种方法解决&am…...
SegMAN模型详解及代码复现
SegMAN模型概述 模型背景 在深入探讨SegMAN模型之前,我们需要了解其研究背景。在SegMAN出现之前,计算机视觉领域的研究主要集中在以下几个方面: 手工制作方法,如SIFT基于卷积神经网络(CNN)的方法,如STN和PTN对平移、…...
Manus AI:多语言手写识别的技术革命与未来图景
摘要:在全球化浪潮下,跨语言沟通的需求日益迫切,但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术,将潦草笔迹转化为精准数字文本,覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…...
保姆级别使用Python实现“机器学习“案例
从安装到运行手把手教学,保证不迷路~ 🌈 零基础友好版教程 📦 第一步:安装必备工具包 别慌!这里有两种安装方式,选你顺手的 方式1:用代码自动安装(推荐新手) 直接在你的Python代码最前面加这几行,运行时会自动安装: # 把这坨代码贴在文件最前面! import sys im…...
K8s 1.27.1 实战系列(九)Volume
一、Volume介绍 Volume 指的是存储卷,包含可被Pod中容器访问的数据目录。容器中的文件在磁盘上是临时存放的,当容器崩溃时文件会丢失,同时无法在多个Pod中共享文件,通过使用存储卷可以解决这两个问题。 1、Volume 的核心作用 数据持久化与生命周期管理 Volume 的核心目标…...
Stable Diffusion游戏底模推荐
一、基础通用型底模 SDXLbase 📚 官方原版底模,支持1024x1024高清出图,适用于各类游戏场景和角色的基础生成,建议作为微调训练的基准模型。 来源: 相关搜索结果 写实风格搭配推荐 🎨 搭配 9realisticSDXL 或 麻袋real…...
GNU Binutils 全工具指南:从编译到逆向的完整生态
1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1. GNU Binutils 全工具指南:从编译到逆向的完整生态 1.1. 引言1.2. 工具分类速查表1.3. 核心工具详解 1.3.1. 编译与汇编工具 1.3.1.1. as(汇编器)1.3.1.2. gcc(…...
nginx 打造高性能 API 网关(Building a High-Performance API Gateway with Nginx)
Nginx 打造高性能 API 网关 引言: 在现代微服务架构中,API 网关扮演着至关重要的角色。它不仅负责统一路由请求,还承担着身份验证、负载均衡、流量控制、日志记录等多重任务。而在众多的 API 网关实现方案中,Nginx 作为一个高性能…...
理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...
DAY10.2 Java核心基础 IO流 字符流和字节流 字符流和字节流在每次处理数据的单位不同,一个是字符,一个是字节 如果复制文件类型是文本类型,字节流字符流都可以 如果复制的文件类型是非文本类型,则只能使用字节流,使…...
Securing a Linux server
Is your Linux server safe from hackers? Can they get hacked? Freak out about getting your server compromised and getting your data leaked? Take a look at some of the tips you can take to secure and protect your Linux server. 1. SSH security SSH is l…...
DBeaver安装教程+连接TDengine数据库
为TDengine安装的DBeaver教程 安装 23.1.1 版本以上的DBeaver 因为官方文档说这个版本之上的DBeaver才支持TDengine内嵌前往DBeaver 官方文档进行版本下载滑到链接最下面点击进入 点击download,进入选择下载版本 等待下载成功即可双击自行安装 打开数据库连接TDen…...
postgreSQL window function高级用法
正常使用:相当于对每个row做一次子查询 SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;order by 区别window frame and partition 没有order by, window function是对整个partition起作用, part…...
【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成
标题:《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》 项目:https://city-super.github.io/procgs/ 来源:香港中文大学;上海人工智能实验室 等 文章目录 摘要一、 程序代码定义 (Procedural Co…...
商业智能BI的未来,如何看待AI+BI这种模式?
昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…...
【计算机视觉】手势识别
手势识别是计算机视觉领域中的重要方向,通过对摄像机采集的手部相关的图像序列进行分析处理,进而识别其中的手势,手势被识别后用户就可以通过手势来控制设备或者与设备交互。完整的手势识别一般有手的检测和姿态估计、手部跟踪和手势识别等。…...
装饰器模式的C++实现示例
核心思想 装饰器设计模式是一种结构型设计模式,它允许动态地为对象添加额外的行为或职责,而无需修改其原始类。装饰器模式通过创建一个装饰器类来包装原始对象,并在保持原始对象接口一致性的前提下,扩展其功能。 装饰器模式的核…...
Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南
文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…...
25.3.12.Linux内核如何和设备树协同工作的?
1.编写设备树 cd arch/riscv/boot/dts/ 再cd到厂商,例如下述内容。 2.编译设备树(dts->dtb)通过dtc命令来转换 3.解析设备树 例如上述内容,都是对设备树的解析。 这里重点说一下内核对设备树的处理吧,因为这个内容是设备树的重点了。 从源代码文件 dts 文件开始...
python中路径操作简介
一、./的基础含义 当前目录 ./表示当前工作目录(Current Working Directory, CWD),即Python脚本运行时所在的目录。例如: open(./data.txt, r) # 打开当前目录下的data.txt文件 作用:避免直接写文件名可能引发的路…...
Flutter 基础组件 Text 详解
目录 1. 引言 2. 基本使用 3. 自定义样式 4. 文本对齐与溢出控制 5. 外边距 5.1 使用 Container 包裹 5.2 使用 Padding 组件 5.3 在 Row/Column 中使用 5.4 动态边距调整 5.5 关键区别说明 5.6 设置 margin 无效 6. 结论 相关推荐 1. 引言 Text 组件是 Flutter 中…...
Torch 模型 model => .onnx => .trt 及利用 TensorTR 在 C++ 下的模型部署教程
一、模型训练环境搭建和模型训练 模型训练环境搭建主要牵扯 Nvidia driver、Cuda、Cudnn、Anaconda、Torch 的安装,相关安装教程可以参考【StarCoder 微调《个人编程助手: 训练你自己的编码助手》】中 5.1 之前的章节。 模型训练的相关知识可以参考 Torch的编程方…...
FreeSWITCH 之 chat
要把 FreeSWITCH 之 chat 完全研究清楚,似乎不容易 发送,路由,接收 跟哪些模块有关 等等 咱一边查资料,一边整理,不着急 先看看 Kamalio 怎么发 MESSAGE loadmodule "uac.so"route[uac_send_message] {…...
如何在Spring Boot中配置和使用MyBatis-Plus
在当今的Java开发中,Spring Boot已经成为了一个非常流行的框架,而MyBatis-Plus则是一个强大的ORM框架,为开发人员提供了更简便的数据库操作方式。很多开发者都在使用Spring Boot和MyBatis-Plus的组合来快速构建高效的应用。今天就来聊聊如何在…...
爱普生可编程晶振SG-8200CJ特性与应用
在高速发展的电子技术领域,时钟源作为电子系统的“心脏”,其性能直接影响设备的稳定性与可靠性。爱普生SG-8200CJ可编程晶振凭借其优秀的频率精度、低抖动性能及广泛的环境适应性,正成为众多领域的得力之选,为各类设备的高效运行与…...
ubuntu中用docker下载opengauss
1.安装docker sudo apt install docker.io2.拉取opengauss镜像 sudo docker pull enmotech/opengauss3.创建容器 sudo docker run --name opengauss --privilegedtrue -d -e GS_PASSWORDEnmo123 enmotech/opengauss:latest3.5.如果容器停止运行(比如关机了&#…...
tslib
使用tslib来读取触摸屏的数据,可以得到原始数据,也可以在原始数据的基础上进行一些处理。比如有些触摸屏比较不稳定,跳动比较大,我们可以将跳动比较大的数据给删除掉 plugins里面的每个文件都会被编译成一个动态库,这些…...
MANUS怎么用
(1)分析方法论我过去说过一个分析模型:供给侧-消费侧。供给侧想做大,得靠生态集成。消费侧想坐大,得靠交互体验。(2)交互体验我先给大家讲一下计算机产业发展70来年,在交互上的变化。…...
