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


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


(прод.)

ского блока. Кроме того, имеется специальная функция (__CrtDoForAlldientObjects), которая позволяет получить список всех клиентских блоков, распределенных к моменту ее вызова. MFC использует данный идентификатор для всех классов производных от класса cobject. Расширение MemDumperValidator тоже использует описанный механизм

FREE BLOCK

Вызов подпрограммы освобождения памяти обычно удаляет память из списков отладочной кучи. Однако если при обращении к функции CrtSetDbgFlag вы устанавливаете флажок CRTDBG DELAY FREE MEM DF, то память не освобождается, а выравнивается влево и заполняется символами OxDD

IGNORE BLOCK

Если вы временно отключаете трассировку DCRT-библиотеки, то любые распределения, выполненные после этого, будут помечаться как блоки Ignore

Расширение MemDumperValidator работает следующим образом: после установки подходящего класса (в языке C++) или типов данных (в языке С), DCR-библиотека будет вызывать MemDumperValidator всякий раз, когда нужно выполнить дамп блока памяти. Расширение просматривает значения данных в блоке и если находит подходящую дамп-функцию, то вызывает ее для выполнения дампа памяти. Аналогичным образом работает и та часть расширения, которая проверяет корректность данных в блоках памяти. Процесс проверки корректности отличается от процесса выдачи дампа только в том, что DCRT-библиотека вызывает не функции дампа, а функции проверки корректности данных соответствующего блока памяти.

Описать MemDumperValidator не так уж сложно, но вот заставить его работать — немного сложнее. В листинге 15.1 показан заголовочный файл MEMDUMPERVALIDATOR.H, который выполняет основную часть работ по инициализации. Включая в программу файла BUGSLAYERUTIL.H, вы автоматически включаете и MEMDUMPERVALIDATOR.H.

Листинг 15-1, JWEMDUMPERVAL1DATOR.H 

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

"Debugging Applications" (Microsoft Press)

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




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



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