常用的 <crtdbg.h>
来源:互联网 发布:软件著作权加急 编辑:程序博客网 时间:2024/06/06 03:04
常用的 <crtdbg.h>
1、在调试状态下让win程在输出窗口中显示调试信息,可以用_RPTn 宏n为显示参数比如_RPT0(_CRT_WARN,"text");
_RPT1(_CRT_WARN,"%d", iTest); _RPT2(_CRT_WARN,"%d,%f", iTest, fTest);....依次类推,详细见msdn
2、侦测内存泄露用_CrtSetDbgFlag函数
_CrtDumpMemoryLeaks()在程序退出点之前调用会在输出中产生内存泄露信息,但是如果程序有多个退出点则无需
在所有退出点都调用该函数,取而代之的是简单的在main()一开始就首先调用
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);这样程序会在退出前自动调用_CrtDumpMemoryLeaks()
产生的信息类似:
Detected memory leaks!Dumping objects ->C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CDObject dump complete.
要在Dumpint objects -> 后面产生文件名的话来确定 泄露文件与代码行号的话(见上面红字部分)则需要在 #include <crtdbg.h>之前加上宏#define _CRTDBG_MAP_ALLOC
#define _CRTDBG_MAP_ALLOC#include <stdlib.h> //msdn里面的例子加了该头文件#include <crtdbg.h>
查找泄露技巧 使用_CrtSetBreakAlloc(long lBreakAlloc );函数参数为内存分配的次数,其值为调试信息的{}中的值
上面的例子为{18}
于是让程序自动在泄露处进入断点可以在_CrtSetDbgFlag后面添加函数_CrtSetBreakAlloc(18);然后调试程序时,程序
自动断在第18次分配内存的时的crt代码处,然后只要通过查看调用堆栈就可以轻松看到之前的泄露的代码了
- 常用的 <crtdbg.h>
- 常用的crtdbg.h的一些说明
- <crtdbg.h> 的作用
- #include <crtdbg.h>
- crtdbg.h: No such file or directory
- C++头文件crtdbg.h详解
- C/C++内存泄漏及检测 #include <crtdbg.h>
- /program files/microsoft visual studio/vc98/include/crtdbg.h(536) : error C2833: 'operator DEBUG_NEW ' is no
- 常用的 INT 10H
- stdio.h常用的函数
- Windows.h中常用的函数
- fcntl.h函数库的常用函数使用
- string.h常用函数
- 2014/9/30------C语言 常用的 windows.h 与 stdlib.h
- stdlib.h头文件下的常用函数
- 常用内存池的实现 头文件 mem.h
- 针对 H.264, 这里有一些常用的码率方案
- 汇编常用的INT 21H系统调用
- Socket send函数和recv函数详解
- oracle深度解析检查点
- git 关于分支,关于远程分支,关于push pull 的时机
- rmi webservice socket 协议 区别
- Oracle 里面的 TRANSLATE 以及 SQL Server 下的实现
- 常用的 <crtdbg.h>
- c++二叉树(统计叶节点,判断两颗二叉树是否相等,交换二叉树的左孩子右孩子,输出叶子到根节点的路径)
- android 关于如何获取控件矩阵 getHitRect
- OSI的七层结构
- 编译MiniGUI 程序
- compiler LLVM GNU
- ADB server didn't ACK 处理
- 算法整理
- Android G1的nand分区情况