随笔- 182
文章- 1
评论- 28
阅读-
57万
随笔分类 - Debug
Debug
关于MFC下检查和消除内存泄露的技巧
摘要:摘要本文分析了Windows环境使用MFC调试内存泄露的技术,介绍了在Windows环境下用VC++查找,定位和消除内存泄露的方法技巧。关键词:VC++;CRT 调试堆函数;试探法。编译环境VC++6.0技术原理检测内存泄漏的主要工具是调试器和 CRT 调试堆函数。若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>注意 #include 语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作。 通过包括 crtdbg.h,将 mallo
阅读全文
VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
摘要:检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。为了使用调试堆函数,必须在要检测内存泄漏和调试的程序中添加下面的语句:#define _CRTDBG_MAP_ALLOC #include<stdlib.h> #include<crtdbg.h> #include "debug_new.h" MSDN 如是说:“必须保证上面声明的顺序,如果改变了顺序,可能不能正常工作。”至于这是为什么,我们不得而知。MS 的老大们经常这样故弄玄虚。 针对非 MFC 程序,再加上周星星的头文件:(1)debug_new.h,当然如果不加这一句,也能检测出内存泄漏,
阅读全文
debug与release的区别
摘要:Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是 基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而 Release版本需要MFC42.DLL支持。Release Build不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC Release库,编译十对应用程序的速度进行优化,而Debug Build则正好相反,它允许对源代码进行调试,可以定义和使用MFC的诊断宏,采用MFC Debug库,对速度没有优化。
阅读全文
VC调试篇
摘要:设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。为了增加调试信息,可以按照下述步骤进行: 打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开) 选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试
阅读全文
谈VC6中Debug版本与Release版本生成的Exe的差异
摘要:用Vc6编写的程序有时候Debug版本好好的,Release版本运行就出错,很多人都遇到过这种问题。前几天又有人问起,于是找了点时间写下这篇东西。总结了一部分Debug版本和Release版本的区别,都是些个人理解,欢迎交流。 Debug版本和Release版本之所以有区别,就是在于各自的编译项不同。不同的编译项组合产生不同的代码,Debug版本的编译项屏蔽了编译器的优 化,增加了调试信息的输出。也就是说,可以通过修改编译项的组合,使得优化过的版本也包含调试信息。于是调试Release版本成为了可能。那就先说说调 试方面Debug做的工作。 提起Vc6的调试,不能不提的就是它的PDB(Prog
阅读全文
使用CRT调试功能来检测内存泄漏
摘要:C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序开发过程中,动态分配的内存处理不当是最常见的问题。其中,最难捉摸也最难检测的错误之一就是内存泄漏,即未能正确释放以前分配的内存的错误。偶尔发生的少量内存泄漏可能不会引起我们的注意,但泄漏大量内存的程序或泄漏日益增多的程序可能会表现出各种 各样的征兆:从性能不良(并且逐渐降低)到内存完全耗尽。更糟的是,泄漏的程序可能会用掉太多内存,导致另外一个程序垮掉,而使用户无从查找问题的真正根源。此外,即使无害的内存泄漏也可能
阅读全文