Отладка приложений


Использование MemDumperValidator - часть 5


Кроме

 того, просматривает все Client-блоки и вызывает специальные функции

 проверки корректности для различных подтипов этих блоков.

Вероятно, лучше всего вызывать эту функцию с макросом VALIDATEALLBLOCKS, который показан ниже.

ПАРАМЕТРЫ :

pContext — Контекстная информация, которая будет передаваться

в каждую функцию проверки корректности. 

ВОЗВРАЩАЕТ :

Ничего. 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

void BUGSOTIL_DLLINTERFACE _stdcall

ValidateAllBlocks ( void * pContext);

 #ifdef _cplusplus

//////////////////////////////////////////////////////////////

// Макросы вспомогательных классов C++

////////////////////////////////////////////////////////////// 

// Объявите этот макрос в своем классе как обычный MFC-макрос,

 #define DECLAREJYEMDEBUG(classname)

 public :

static DVINFO m_stDVInfo;

static void ClassDumper ( const void * pData);

static void ClassValidator ( const void * pData,

const void * pContext);

static void * operator new ( size_t nSize)

{

if ( 0 == m_stDVInfo.dwValue)

{

m_stDVTnfо.pfnDump = classname::ClassDumper;

 m_stDVInfo.pfnValidate = classname::ClassValidator; 

AddClientDV ( &m_stDVInfo); 

}

return ( _malloc_dbg ( nSize 

(int)m_stDVlnfо.dwValue, 

_FILE_ ,

 _LINE_ ) ) ;

}

static void * operator new ( size_t nSize ,

char * IpszFileName,

 int nLine )

{

if ( 0 = m_stDVInfo.dwValue)

{

m_stDVInfo.pfnDump = classname::ClassDumper; 

m_stDVInfo.pfnValidate = classname::ClassValidator; 

AddClientDV ( &m_stDVInfo);

 }

return ( _malloc_dbg ( nSize 

(int)m_stDVInfо.dwValue,

 IpszFileName ,

 nLine )) ; 

}

static void operator delete ( void * pData)

 {

_free_dbg ( pData, (int)m_stDVInfo.dwValue);

}

// Объявите этот макрос в начале своего СРР-файла.

 #define IMPLEMENT_MEMDEBUG(classname)

DVINFO classname::m_stDVInfо = { 0, 0, 0 }

// Макрос для отладочных распределений памяти.


Начало  Назад  Вперед



Книжный магазин