诊断服务

Microsoft 基础类库提供了调试程序更易于的许多诊断服务。这些诊断服务包括在运行时,在运行时,使您能够跟踪您的程序的内存分配,转储对象的内容,并打印调试消息的宏和全局函数。宏和全局函数诊断服务的分组为以下类别:

  • 泛型诊断宏

  • 泛型诊断函数和变量

  • 对象诊断功能

这些宏和函数进行 CObject 从派生的任何类具有 MFC 的调试版本和发布版本。但是,在发行版中除 DEBUG_NEWVERIFY 之外均不执行。

在调试库中,所有分配的内存块括起来与一系列 “临界字节”。如果这些字节由迷惑不解内存写入打扰,则诊断实例可以报告问题。如果包含行:

#define new DEBUG_NEW

在实现文件,所有对 new 将存储文件名和行号内存分配发生位置的。函数 CMemoryState::DumpAllObjectsSince 会显示此附加信息,您便可以标识内存泄漏。还引用类 CDumpContext 有关诊断输出的更多信息。

此外, C 运行库还支持您可以使用调试应用程序的安装诊断功能。有关更多信息,请在 " 运行库参考 调试实例 引用。

MFC 泛型诊断宏

断言

,如果指定的表达式计算为在库,的调试版本的 FALSE 输出消息然后中止程序。

ASSERT_KINDOF

测试对象是指定类的对象从指定的类派生的或类。

ASSERT_VALID

通过调用其成员函数 AssertValid 测试对象的内部有效性;通常重写从 CObject

DEBUG_NEW

提供一个文件名,任何对象分配的行号调试模式有助于查找内存泄漏。

DEBUG_ONLY

类似于 ASSERT ,但不测试该表达式的值;用于只应执行的代码调试模式。

跟踪

提供在库的调试版本的 printf相同的功能。

验证

类似于 ASSERT ,但计算表达式在库的发布版本以及在调试版本。

MFC 泛型诊断变量和函数

afxDump

CDumpContext 信息发送到调试输出窗口或为调试时间全局变量。

afxMemDF

控件调试内存分配器的行为的全局变量。

AfxCheckError

使用的全局变量通过的测试 SCODE 以确定它是否为错误,并且,如果是这样,引发相应的错误。

AfxCheckMemory

检查所有当前分配的内存的完整性。

AfxDump

如果调用,当在调试器中,转储对象的状态时,在调试时。

AfxDumpStack

生成当前堆栈的图像。此功能静态总是链接。

AfxEnableMemoryLeakDump

启用内存泄漏转储。

AfxEnableMemoryTracking

启用和禁用跟踪的内存。

AfxIsMemoryBlock

验证内存块正确地分配。

AfxIsValidAddress

验证内存地址范围在程序的区域内。

AfxIsValidString

确定到字符串的指针是否有效。

AfxSetAllocHook

启用对每个内存分配的函数。

MFC 对象诊断功能

AfxDoForAllClasses

执行在任何 CObject的指定功能 - 支持运行时类型检查的派生类。

AfxDoForAllObjects

执行在任何 CObject的指定功能 - 随 new的派生对象。

请参见

概念

MFC宏和Globals