Настройка дампа объекта
Обновлен: Ноябрь 2007
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Экспресс-выпуск |
Только машинные коды |
|||
Standard |
Только машинные коды |
|||
Pro и Team |
Только машинные коды |
Обозначения:
Применяется |
|
Неприменимо |
|
Команда или команды скрытые по умолчанию. |
Если класс наследуется от CObject, можно переопределить функцию-член Dump, чтобы получить больше сведений при использовании DumpAllObjectsSince для вывода объектов в Окне вывода.
Функция Dump записывает текстовое представление переменных-членов объекта в контекст дампа (CDumpContext). Контекст дампа подобен потоку ввода-вывода. Оператор добавления (<<) используется для отправки данных в CDumpContext.
При переопределении функции Dump следует вначале вызвать версию Dump базового класса для вывода содержимого объектов базового класса. Затем вывести текстовое описание и значение для каждой переменной-члена производного класса.
Объявление функции Dump выглядит следующим образом:
class CPerson : public CObject
{
public:
#ifdef _DEBUG
virtual void Dump( CDumpContext& dc ) const;
#endif
CString m_firstName;
CString m_lastName;
// And so on...
};
Поскольку формирование дампа объекта имеет смысл только при отладке программы, объявление функции Dump заключается в блок #ifdef _DEBUG / #endif.
В следующем примере функция Dump сначала вызывает функцию Dump для базового класса. Затем пишет короткое описание каждой переменной-члена и вместе со значением этой переменной направляет его в диагностический поток.
#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
// Call the base class function first.
CObject::Dump( dc );
// Now do the stuff for our specific class.
dc << "last name: " << m_lastName << "\n"
<< "first name: " << m_firstName << "\n";
}
#endif
Для указания, куда будут направлены выходные данные дампа, следует применить аргумент CDumpContext. Отладочная версия MFC использует предопределенный объект CDumpContext с именем afxDump, который направляет выходные данные в отладчик.
CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif