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`操作,帮助开发者检测潜在的内存泄漏问题。"以动态方式记录"意味着它可以在运行时监控内存分配与释放行为,而不只是在编译...
标题中的“dbg_new.zip_dbg_new_dbg_new.t_dbg_new.tgz_dbg_new.zip_内存泄露”虽然看起来像一个拼接的字符串,但它可能表示的是一个用于调试内存泄露问题的工具或一系列文件。描述明确指出,这是一个关于动态内存...
内存泄漏通常发生在动态内存分配时,比如使用C++的`new`或C的`malloc`函数分配内存。当不再需要这些内存时,必须通过相应的`delete`或`free`函数进行释放。如果忘记释放或没有正确释放,这部分内存就无法被系统回收...
Debug_New提供了调试内存泄漏的可能性,不仅可以(请注意“ not only”;这只是其功能之一)在一种方式,但是使用内存状态来实现。 -跨平台+跨编译器支持(仅针对c ++使用预处理器和模板-voodoo-magic)-支持C和C ++...
tp_debug_info.txt
《BYD_Debug_V1.0.5.15a:比亚迪汽车软件调试工具详解》 在当今智能化汽车领域,软件已经成为车辆性能与功能的核心部分。BYD(比亚迪)作为中国领先的电动汽车制造商,一直在努力提升其车辆的软硬件结合能力。在这...
`debug_new.h`文件是自定义内存泄漏检测机制的核心部分之一。首先,它通过预处理器指令确保只在调试模式下生效。具体来说,当定义了`_DEBUG`宏时,会定义一个新的`new`运算符,并且在每次调用`new`时记录下文件名和...
"debug"通常意味着这个驱动包含了调试功能,允许开发者或高级用户检查和调整驱动行为。通过调试工具,如Windows内置的调试器WinDbg,可以查看驱动运行状态,查找和修复潜在问题。这一步骤对于开发人员和技术支持人员...
根据提供的文档标题、描述、标签以及部分内容,我们可以深入解析与 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"两个组件构成。这些版本号如"V1.0.7.19a"和"V2.0.5.9a"代表了软件的不同迭代,通常更新包含了性能提升、...
termux-app_v0.118.0+github-debug_arm64-v8a.apk
### 关于Cortex-M系列调试接口DAP (Debug Access Port) 的详解 #### 知识点一:DAP(Debug Access Port)概述 - **定义**:DAP(Debug Access Port),即调试访问端口,是ARM Cortex-M系列处理器中用于调试的核心...
flashplayer_11_ax_debug_32bit
这对于检测和修复内存泄漏或过早释放接口的问题非常有用。此外,它还能帮助开发者跟踪可能存在的循环引用问题,这些问题在没有适当的调试支持时可能很难发现。 在实际应用中,你通常会在调试配置下启用`_ATL_DEBUG_...
在Delphi7中,JCL提供了一个便捷的方式来捕获和解析异常时的堆栈信息,相比FastMM内存管理器的泄漏检测,它更专注于异常时的上下文信息。 首先,JCL的异常处理机制允许开发者注册异常处理器,当程序中发生异常时,...
例子主要包括IOCP通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试IOCP的性能和压力,最大连接数...SQLDebug_Fan的源码客户端用的是indy9,我把它移植到indy10,方便学习和研究
最后,为了让程序更具用户友好性,我们需要添加错误处理机制,例如检查串口是否已打开、波特率是否有效等,防止程序因异常而崩溃。 综上所述,"serial_debug_tool"串口助手源码基于C#和Winform,通过提供直观的界面...
标题“flashplayer_11_plugin_debug_32bit”指的是Adobe Flash Player的11版本的32位调试插件。这个软件组件是专门为Web开发者和测试人员设计的,旨在帮助他们在网页上测试和调试Flash内容。以下是关于这个主题的...
debug_log.txt
7. **性能分析(Profiler)**:评估JavaScript代码的性能,找出内存泄漏或性能瓶颈。 8. **Source Maps**:对于使用了压缩或编译后的代码,source maps能将运行时的错误和日志映射回原始源码,便于调试。 9. **...