Diagnostic Services
The Microsoft Foundation Class Library supplies many diagnostic services that make debugging your programs easier. These diagnostic services include macros and global functions that allow you to track your program's memory allocations, dump the contents of objects during run time, and print debugging messages during run time. The macros and global functions for diagnostic services are grouped into the following categories:
General diagnostic macros
General diagnostic functions and variables
Object diagnostic functions
These macros and functions are available for all classes derived from CObject in the Debug and Release versions of MFC. However, all except DEBUG_NEW and VERIFY do nothing in the Release version.
In the Debug library, all allocated memory blocks are bracketed with a series of "guard bytes." If these bytes are disturbed by an errant memory write, then the diagnostic routines can report a problem. If you include the line
#define new DEBUG_NEW
in your implementation file, all calls to new will store the filename and line number where the memory allocation took place. The function CMemoryState::DumpAllObjectsSince will display this extra information, allowing you to identify memory leaks. Refer also to the class CDumpContext for additional information on diagnostic output.
In addition, the C run-time library also supports a set of diagnostic functions you can use to debug your applications. For more information, see in the Run-Time Library Reference.
MFC General Diagnostic Macros
ASSERT | Prints a message and then aborts the program if the specified expression evaluates to FALSE in the Debug version of the library. |
ASSERT_KINDOF | Tests that an object is an object of the specified class or of a class derived from the specified class. |
ASSERT_VALID | Tests the internal validity of an object by calling its AssertValid member function; typically overridden from CObject. |
DEBUG_NEW | Supplies a filename and line number for all object allocations in Debug mode to help find memory leaks. |
TRACE | Provides printf-like capability in the Debug version of the library. |
TRACE0 | Similar to TRACE but takes a format string with no arguments. |
TRACE1 | Similar to TRACE but takes a format string with a single argument. |
TRACE2 | Similar to TRACE but takes a format string with two arguments. |
TRACE3 | Similar to TRACE but takes a format string with three arguments. |
VERIFY | Similar to ASSERT but evaluates the expression in the Release version of the library as well as in the Debug version. |
MFC General Diagnostic Variables and Functions
afxDump | Global variable that sends CDumpContext information to the debugger output window or to the debug terminal. |
afxMemDF | Global variable that controls the behavior of the debugging memory allocator. |
afxTraceEnabled | Global variable used to enable or disable output from the TRACE macro. |
afxTraceFlags | Global variable used to turn on the built-in reporting features of MFC. |
AfxCheckError | Global variable used to test the passed to see if it is an error and, if so, throws the appropriate error. |
AfxCheckMemory | Checks the integrity of all currently allocated memory. |
AfxDump | If called while in the debugger, dumps the state of an object while debugging. |
AfxDumpStack | Generate an image of the current stack. This function is always linked statically. |
AfxEnableMemoryTracking | Turns memory tracking on and off. |
AfxIsMemoryBlock | Verifies that a memory block has been properly allocated. |
AfxIsValidAddress | Verifies that a memory address range is within the program's bounds. |
AfxIsValidString | Determines whether a pointer to a string is valid. |
AfxSetAllocHook | Enables the calling of a function on each memory allocation. |
MFC Object Diagnostic Functions
AfxDoForAllClasses | Performs a specified function on all CObject-derived classes that support run-time type checking. |
AfxDoForAllObjects | Performs a specified function on all CObject-derived objects that were allocated with new. |