`
iwebcode
  • 浏览: 2072293 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

从debug_new浅谈内存泄漏检查

 
阅读更多
debug_new和内存管理的一些问题
确实,平时只管用debug_new,也大概知道实现的原理,重载new,
察看mfc的“源代码”:
void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
#define DEBUG_NEW new(THIS_FILE, __LINE__)
#if _MSC_VER >= 1200
void AFX_CDECL operator delete(void* p, LPCSTR lpszFileName, int nLine);
#endif
这里先重载了new操作符,然后用debug_new的宏定义节省了this_file和line的输入。
其中this_file是定义的一个宏得到当前文件的路径,line定义的是有new分配的那一行号。
下面具体分析一下debug_new的重载:
我们可以想一下,既然已经得到文件路径,和行号,还有分配内存时候可以得到指向内存的指针
这些信息都是我们要得到的
首先,我们可以先定义一个struct来存放这些信息,在分配内存的时候把这些信息放入一个map中
delete的时候删除信息,delete时候如果map里面的信息信息已经不存在,出现了问题, 程序退出的时候如果map中还有未释放的信息,则说明还有未释放的信息,有泄漏
实现的原理就是这样
但是要有时要考虑多线程的问题,跨平台的问题~~==

几个小技巧
1。windows自带了很多内存管理的api
_CrtDbgReport, _CrtDoForAllClientObjects, _CrtDumpMemoryLeaks,_CrtIsValidHeapPointer, _CrtIsMemoryBlock, _CrtIsValidPointer,_CrtMemCheckpoint, _CrtMemDifference, _CrtMemDumpAllObjectsSince, _CrtMemDumpStatistics, _CrtSetAllocHook, _CrtSetBreakAlloc, _CrtSetDbgFlag,_CrtSetDumpClient, _CrtSetReportFile, _CrtSetReportHook, _CrtSetReportMode
2。mfc中封装了这些api并重载了new和delete
会在afx.h中就可以看到这些包装的咚咚

在Windows平台下几个工具
MS C-Runtime Library内建的检测功能;
外挂式的检测工具,诸如,Purify,BoundsChecker等;
利用Windows NT自带的Performance Monitor。
分享到:
评论

相关推荐

    debug_new:以动态方式记录C++用户函数调用中的每一个new和delete动作,用于内存泄漏检测

    "debug_new" 是一个专为C++设计的动态调试工具,它主要用于追踪和记录程序中`new`和`delete`操作,帮助开发者检测潜在的内存泄漏问题。"以动态方式记录"意味着它可以在运行时监控内存分配与释放行为,而不只是在编译...

    dbg_new.zip_dbg_new_dbg_new.t_dbg_new.tgz_dbg_new.zip_内存泄露

    标题中的“dbg_new.zip_dbg_new_dbg_new.t_dbg_new.tgz_dbg_new.zip_内存泄露”虽然看起来像一个拼接的字符串,但它可能表示的是一个用于调试内存泄露问题的工具或一系列文件。描述明确指出,这是一个关于动态内存...

    内存泄漏检测工具(DEBUG_BUG)

    内存泄漏通常发生在动态内存分配时,比如使用C++的`new`或C的`malloc`函数分配内存。当不再需要这些内存时,必须通过相应的`delete`或`free`函数进行释放。如果忘记释放或没有正确释放,这部分内存就无法被系统回收...

    debug_new:C / C ++一切内存调试器-开源

    Debug_New提供了调试内存泄漏的可能性,不仅可以(请注意“ not only”;这只是其功能之一)在一种方式,但是使用内存状态来实现。 -跨平台+跨编译器支持(仅针对c ++使用预处理器和模板-voodoo-magic)-支持C和C ++...

    tp_debug_info.txt

    tp_debug_info.txt

    BYD_Debug_V1.0.5.15a.rar

    《BYD_Debug_V1.0.5.15a:比亚迪汽车软件调试工具详解》 在当今智能化汽车领域,软件已经成为车辆性能与功能的核心部分。BYD(比亚迪)作为中国领先的电动汽车制造商,一直在努力提升其车辆的软硬件结合能力。在这...

    VC6 内存泄漏检测

    `debug_new.h`文件是自定义内存泄漏检测机制的核心部分之一。首先,它通过预处理器指令确保只在调试模式下生效。具体来说,当定义了`_DEBUG`宏时,会定义一个新的`new`运算符,并且在每次调用`new`时记录下文件名和...

    MH5000-31_Windows_debug_driver(20200331).rar

    "debug"通常意味着这个驱动包含了调试功能,允许开发者或高级用户检查和调整驱动行为。通过调试工具,如Windows内置的调试器WinDbg,可以查看驱动运行状态,查找和修复潜在问题。这一步骤对于开发人员和技术支持人员...

    debug_interface_v5_2_architecture_specification_IHI0031E

    根据提供的文档标题、描述、标签以及部分内容,我们可以深入解析与 ARM Debug Interface v5.2 架构规范(IHI0031E)相关的技术知识点。 ### 一、概述 **ARM Debug Interface v5.2 (ADI v5.2) 架构规范** 是由 ARM ...

    BYD_Debug_V1.0.7.19a MP100_BYD_V2.0.5.9a

    比亚迪的调试和烧录软件是针对其单片机系统的重要工具,主要由"BYD_Debug_V1.0.7.19a"和"MP100_BYD_V2.0.5.9a"两个组件构成。这些版本号如"V1.0.7.19a"和"V2.0.5.9a"代表了软件的不同迭代,通常更新包含了性能提升、...

    termux-app_v0.118.0+github-debug_arm64-v8a.apk

    termux-app_v0.118.0+github-debug_arm64-v8a.apk

    IHI0031C_debug_interface_as.docx

    ### 关于Cortex-M系列调试接口DAP (Debug Access Port) 的详解 #### 知识点一:DAP(Debug Access Port)概述 - **定义**:DAP(Debug Access Port),即调试访问端口,是ARM Cortex-M系列处理器中用于调试的核心...

    flashplayer_11_ax_debug_32bit

    flashplayer_11_ax_debug_32bit

    How does _ATL_DEBUG_INTERFACES work?有关ATL调试的话题(8KB)

    这对于检测和修复内存泄漏或过早释放接口的问题非常有用。此外,它还能帮助开发者跟踪可能存在的循环引用问题,这些问题在没有适当的调试支持时可能很难发现。 在实际应用中,你通常会在调试配置下启用`_ATL_DEBUG_...

    JCL_Debug_StackTrace_Demo

    在Delphi7中,JCL提供了一个便捷的方式来捕获和解析异常时的堆栈信息,相比FastMM内存管理器的泄漏检测,它更专注于异常时的上下文信息。 首先,JCL的异常处理机制允许开发者注册异常处理器,当程序中发生异常时,...

    Delphi高性能大容量SOCKET并发完成端口例子完整实例源码(根据SQLDebug_Fan的源码移植)

    例子主要包括IOCP通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试IOCP的性能和压力,最大连接数...SQLDebug_Fan的源码客户端用的是indy9,我把它移植到indy10,方便学习和研究

    serial_debug_tool_串口助手_串口助手源码_c#串口_tool_winform_

    最后,为了让程序更具用户友好性,我们需要添加错误处理机制,例如检查串口是否已打开、波特率是否有效等,防止程序因异常而崩溃。 综上所述,"serial_debug_tool"串口助手源码基于C#和Winform,通过提供直观的界面...

    flashplayer_11_plugin_debug_32bit

    标题“flashplayer_11_plugin_debug_32bit”指的是Adobe Flash Player的11版本的32位调试插件。这个软件组件是专门为Web开发者和测试人员设计的,旨在帮助他们在网页上测试和调试Flash内容。以下是关于这个主题的...

    debug_log.txt

    debug_log.txt

    Debug_js.rar_ jsdebug_debug js_javascript_js debug_js能debug

    7. **性能分析(Profiler)**:评估JavaScript代码的性能,找出内存泄漏或性能瓶颈。 8. **Source Maps**:对于使用了压缩或编译后的代码,source maps能将运行时的错误和日志映射回原始源码,便于调试。 9. **...

Global site tag (gtag.js) - Google Analytics