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


Глубокие проверки корректности - часть 2


Операции распределения памяти языка С более сложны, чем в языке C++, но функции проверки корректности памяти в обоих языках используются одинаково. Все что нужно делать — это вызывать макрос VALIDATEALLBLOCKS. В отладочных построениях этот макрос расширяется до вызова подпрограммы vaiidateAHBiocks. В качестве параметра она использует любое значение, которое вы хотите передать функциям проверки корректности, зарегистрированным вместе с библиотекой. Раньше при помощи этого параметра я определял глубину проверок корректности, выполняемых функцией. Имейте в виду, что validateAHBlocks пересылает данное значение каждой зарегистрированной подпрограмме проверки корректности, чтобы можно было координировать эти значения в команде разработчиков.

Чтобы понять, как работают функции расширения MemDumperValidator, просмотрите программу с именем Dump, показанную в листинге 15-2. Dump — это "пустая", незаполненная программа, в которой показано все,, что нужно для использования этого расширения. Я не привожу пример кода, но MemDumperValidator хорошо работает и с MFC, потому что MFC будет вызывать любые предварительно зарегистрированные функции подключения клиентских дампов.

Листинг 15-2. DUMP.CPP 

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

"Debugging Applications" (Microsoft Press)

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

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

#include <stdio.h>

#include <stdlib.h>

#include <memory.h> 

#include <string.h> 

#include <iostream.h>

#include "BugslayerUtil.h"

class TestClass

{

public:

TestClass ( void)

{

strcpy ( m_szData, "TestClass constructor data!");

}

TestClass ( void)

{

m_szData[ 0 ] = '\0';

}

// Объявление средств отладки памяти для классов языка C++

DECLARE_MEMDEBUG ( TestClass); 

private :

char m_szData[ 100 ]; 

};

// Этот макрос устанавливает статическую структуру DVINFO .




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



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