关注分享主机优惠活动
国内外VPS云服务器

C++ 内存泄漏故障排除

摘要:TwoUsageProfile 提供内置内存泄漏检测,但其功能充其量是最少的。 可定制的内存泄漏报告可以保存到文件或发送到调试器,并且可以包含不同级别的详细信息。 是当今唯一一款免费使用的内存泄漏检测器,将上面列出的所有专业级功能整齐地打包到一个易于使用的库中。

简介:C++语言灵活的指针属性带来了便利,但也带来了潜在的问题。 由于编程不规范和相关问题,内存是 C++ 程序员面临的一个主要问题。 关于泄漏问题,Blogger在之前的项目开发过程中就遇到了图像内存泄漏的问题。 当应用少量内存时不容易检测到。 例如,ARM 程序通常会泄漏非常少量的内存。 但是,程序运行时间一长就崩溃了,不太好复现。 文章目录 1 故障排除经验 2 在 Visual C++2.1 中使用 Visual Leak Detector 在 Visual C++2.2 中 Visual Leak Detector 概述 获取并编译 Visual Leak Detector 源代码 2.2.1 获取源代码,相关 Git 地址 2.2 .2 发布版本获取 2.2.3 编译 2.2.4 包含在 gtest 项目测试中 2.3 如何测试自己的项目 2.3.1 配置项目 2.3.2 创建简单的测试用例 2.3.3 测试结果如图 3 所示。 使用概述 - 体验故障排除。 有经验的程序员都了解编程。 检查内存应用的位置,例如 malloc 和 new 关键字。 一种情况是按照程序逻辑申请和释放。 您应该知道,当发生异常时,您的程序不会按预期释放内存。 这个时候我们也要防止愧疚感储存泄漏。 2 使用 Visual C++ 的 Visual Leak Detector 2.1 Visual C++ 的 Visual Leak Detector 概述

Visual C++ 包含内存泄漏检测,但其功能最多是最少的。 该内存泄漏检测器是作为 Visual C++ 提供的内置内存泄漏检测器的免费替代品而创建的。 视觉检漏仪具有内置检测仪所没有的多项功能。

为每个泄漏块提供完整的堆栈跟踪,包括可用的源文件和行号信息。 检测大多数(如果不是全部)类型的进程内内存泄漏,包括基于 COM 的泄漏和纯 Win32 基于堆的泄漏。

您可以从泄漏检测中排除选定的模块(甚至 DLL 或主 EXE)。 提供泄漏块的完整数据转储(十六进制和 ASCII 格式)。 可定制的内存泄漏报告:可以保存到文件或发送到调试器,并且可以包含不同级别的详细信息。 其他适用于 Visual C++ 的售后检漏仪已经上市。 但大多数真正流行的软件(例如 Purify 和 BoundsChecker)都非常昂贵。 尽管存在一些免费的替代方案,但它们通常过于麻烦、限制过多或不可靠。 Visual Leak Detector 是目前唯一一款适用于 Visual C++ 的免费内存泄漏检测器,它将上面列出的所有专业级功能巧妙地打包到一个易于使用的库中。

2.2 获取并编译Visual Leak Detector源码 2.2.1 获取源码,关联git地址 git clone https://github.com/oneiric/vld 2.2.2 在Visual C++中获取release版本 有git主页上有Visual Leak Detector版本,只需下载并安装对应版本即可。 2.2.3 编辑翻译代码所需的VS版本是2019,博主使用的版本是2015。 编译时会报错。 项目-->属性--->常规-->平台工具集--->选择Visual Studio 2015(v140)验证并确定2.2 .4自带一个gtest项目来测试,编译项目自带的vld_main进行测试。 这个项目自带了一个gtest项目来检查相关内存。 泄漏场景经过自我测试。 2.3 如何测试自己的项目 2.3.1 配置项目。

将vld.h文件引入到您的项目中并配置vld.lib库。 在链接库中

设置当前项目处于调试模式,显示堆栈相关的调用信息

2.3.2 创建一个简单的测试用例

三个.h

#pragma一次类 3 { public:三();

三.cpp

#include "三.h" 三::三() { } 三::~三() { }

main.cpp

#include #include #include #include #include "third.h" 使用命名空间 std。 int main() { 输出

未经允许不得转载:主机频道 » C++ 内存泄漏故障排除

评论 抢沙发

评论前必须登录!