VC编程中的调试宏和内存泄漏
来源:互联网 发布:js when done 编辑:程序博客网 时间:2024/06/05 17:16
一 调试宏
MFC中经常会有一些用于调试的宏,比如TRACE,ASSERT和VERFIY。它们的好处就是在我们开发的时候也就是debug模式下,可以给我们提供一些调试信息,而在release模式下面不会产生这些调试信息,也就不会影响我们代码的性能,如果我们用printf()函数的话那么在release模式下也是会产生打印信息的,所以使用这些宏能够让我们的开发更加有效。
TRACE的用法主要由两种,带参数和不带参数的:
TRACE("This is for test\n");TRACE("This is %dth test\n",2);
如果我们在代码中添加这两句,并且设置断点,那么在调试的时候可以在Output窗口中观察到打印信息:
对于ASEERT宏和VERFIY宏,其功能差不多,都是确保后面的表达式为真,但是在release模式下面,VERFIY宏还是会计算表达式的值,而ASSERT却不会,所以我个人认为大部分情况使用ASEERT就行了。
二 检查内存泄漏
在MFC中,检查内存泄漏也非常简单,MFC会给我们预先定义一些宏,如果在debug模式下,会定义_DEBUG,并且会自动添加如下代码
#ifdef _DEBUG#define new DEBUG_NEW#endif
上面的代码会将我们的new 替换成DEBUG_NEW,这个宏可以记录所有开辟内存的文件名和对应代码的行号,而一旦释放了就会删除相应的记录,所以如果存在内存泄漏,那么最后就会产生记录,我们同样可以在调试的Output窗口中看到内存泄漏的信息:
从上面的结果可以看出,我们开辟了40个字节没有释放,最后的转存信息也表明在etfdemodlg.cpp中的78行有40 bytes long的数据没有释放。
上面的情况是在MFC中的,如果我们只是建立了一个普通的c++工程的话,其实也可以利用相似的方法进行判断,这时我们自己添加下列代码就行了
#define new DEBUG_NEW#include<afx.h>
因为DEBUG_NEW的定义是在<afx.h>中,所以要包含相应的头文件。
最后,因为这个方法的实现其实是利用了CmemoryStated的方法DumpAllObjectsSince实现的,所以我们可以自己在程序的中间利用DumpAllObjectsSince函数来检测相应位置的内存使用情况,具体的方法可以参见MSDN。
- VC编程中的调试宏和内存泄漏
- vc内存泄漏调试
- VC++ 内存泄漏调试
- VC++调试内存泄漏简单方法
- [经验总结]VC++内存泄漏定位与调试
- VC,VS2010如何调试内存泄漏
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏[转帖]
- 如何调试MFC中的内存泄漏[转帖]
- 如何调试MFC中的内存泄漏[转帖]
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏[转帖]
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏
- 如何调试MFC中的内存泄漏[转帖]
- Android的内存泄漏和调试
- QR码生成原理(一)
- Java之美[从菜鸟到高手演变]之设计模式三
- centos进入单用户模式修改fstab文件
- iPhone开发之深入浅出 (3) — ARC之前世今生
- VC编程中的调试宏和内存泄漏
- QR码编码原理二(编码)
- Java之美[从菜鸟到高手演变]之设计模式四
- Hibernate入门(以查询为例)
- Javascript---有趣的一段代码---局部变量
- iPhone开发之深入浅出 (4) — ARC之循环参照
- QR码编码原理三(日本汉字和中文编码)
- 按值传递和引用传递的区别
- 电脑BIOS 设置