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


Реализация MemDumperValidator - часть 2


Листинг 15-3.CRTDBG_INTERNALS.H

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

"Debugging Applications" (Microsoft Press)

Copyright (c) 1997-2000 John Robbins — All rights reserved.

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

#ifndef _CRTDBG_INTERNALS_H

#define _CRTDBG_INTERNALS_H 

#define nNoMansLandSize 4

 typedef struct _CrtMemBlockHeader

 {

struct _CrtMemBlockHeader * pBlockHeaderNext ;

struct _CrtMemBlockHeader * pBlockHeaderPrev ;

char * szFileName ; 

int nLine ;

 size_t nDataSize ;

 int nBlockUse ;

 long IRequest ; 

unsigned char gap[nNoMansLandSize] ;

  /* followed by:

* unsigned char data[nDataSize];

* unsigned char anotherGap[nNoMansLandSize];

*/

} _CrtMemBlockHeader; 

#define pbData(pblock) ((unsigned char *) \

((_CrtMemBlockHeader *)pblock + 1) )

tfdefine pHdr(pbData) (((_CrtMemBlockHeader *)pbData)-l) 

#endif // _CRTDBG_INTERNALS_H

Можно также использовать определение структуры _CrtMemBiockHeader, чтобы получить дополнительную информацию из структур _crtMemstate, возвращаемых функцией _crtMemCheckpoint, потому что первым элементом в этой структуре является указатель на _crtMemBiockHeader. Надеюсь, что будущая версия DCRT-библиотеки обеспечит реальные функции доступа для получения информации о блоках памяти.

Просматривая поставляемый на сопровождающем компакт-диске исходный код файла MEMDUMPERVALIDATOR.CPP, являющегося частью проекта BUGSLAYERUTIL.DLL, можно заметить, что для внутреннего управления памятью применяются API-функции семейства HeapCreate, напрямую работающие с кучей. Причина в том, что функции дампов и hook-функции, используемые с DCRT-библиотекой, будут вызываться повторно, если применяются подпрограммы стандартной библиотеки. Имейте в виду, что мы не говорим о многопоточных повторных входах. Если код обработчика распределяет память с помощью обращения к функции malloc, то он будет введен повторно, потому что hook-функции вызываются при каждом распределении памяти.

 




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



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