诊断服务

Microsoft 基础类 (MFC) 库提供程序使调试更加容易的多诊断服务。 在运行时,可以跟踪程序的内存分配,转储对象内容,并输出调试消息的其中包括诊断服务宏和全局函数。 宏与全局诊断服务的函数组合成下列类别:

  • MFC 中的常规诊断宏

  • 常规诊断函数和变量

  • 对象诊断函数

这些宏和函数从 CObject 派生的所有类具有 MFC 调试版本和发布版本。 但是,所有除 DEBUG_NEWVERIFY 在发布版本中不做任何事。

在调试库中,分配的所有内存块括起来使用一系列“保护字节”。如果这些字节的内存写入迷惑不解情况,则报告可以诊断程序问题。 如果包括行:

#define new DEBUG_NEW

实现文件中,对 new 的调用将所有存储发生内存分配的文件名和行号。 函数 CMemoryState::DumpAllObjectsSince 会显示此额外的信息,可以识别内存泄漏。 还可以参考 CDumpContext 关于类诊断输出的更多信息。

此外,C# 运行库还支持可以使用调试应用程序的一组函数诊断。 有关详细信息,请参阅《运行时库参考》中的Debug Routines

MFC 中的常规诊断宏

ASSERT

如果指定的表达式计算到库的调试版本,FALSE 以打印消息并中止程序。

ASSERT_KINDOF

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

ASSERT_VALID

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

DEBUG_NEW

提供文件名,并且所有的对象分配的行号调试模式有助于查找内存泄漏。

DEBUG_ONLY

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

TRACE

提供一些库的调试版本的 printf类似的功能。

VERIFY

类似于ASSERT 计算表达式在该库的发布版本同时在调试版本。

MFC常规诊断变量和函数

afxDump

CDumpContext 信息发送到调试器的全局变量输出窗口或到调试服务器。

afxMemDF

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

AfxCheckError

用于的全局变量测试通过的 SCODE 以确定它是否为错误,如果是则会引发相应的错误。

AfxCheckMemory

检查任何当前分配的内存完整性。

AfxDump

如果调用,则在调试器转储对象的状态时调试过程。

AfxDumpStack

生成当前堆栈的图像。 此静态函数始终链接。

AfxEnableMemoryLeakDump

启用内存泄漏转储。

AfxEnableMemoryTracking

启用和禁用跟踪的内存。

AfxIsMemoryBlock

验证存储区分配正确。

AfxIsValidAddress

在程序的边界内验证内存地址范围。

AfxIsValidString

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

AfxSetAllocHook

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

MFC对象诊断函数

AfxDoForAllClasses

对任何 CObject的指定函数 - 支持运行时类型检查的派生类。

AfxDoForAllObjects

对任何 CObject的指定函数 - 分配的 new派生的对象。

请参见

概念

MFC 宏和全局函数