Шаг 224 - Dump

Выводим пользовательские классы в отладочный контекст CDumpContext:

virtual void Dump( CDumpContext& dc ) const

Создавая свой класс-потомок от CObject Вы должны перегрузить функцию Dump для вывода Ваших данных описанных в классе. В ходе вывода в отладочный поток выводится и имя класса при условии, что к классу добавлена информация о нем с помощью

IMPLEMENT_DYNAMIC
IMPLEMENT_SERIAL 

Это отладочная функция и использоваться она должна только в версии Debug следите за этим с помощью #ifdef _DEBUG #endif директивами компиляции. Кроме того эта функция const, поэтому данные менять нельзя. Кроме того вы должны использовать F5 для запуска в режиме отладки. Давайте посмотрим пример:

#include "stdafx.h"
#include "afxwin.h"
#include "iostream.h"

class CMyObject : public CObject
{
public:
	#ifdef _DEBUG
		void AssertValid() const;
		void Dump(CDumpContext& dc) const;
	#endif
 
protected:
    DECLARE_DYNCREATE(CMyObject)
private:
	int x;
	int y;
};

IMPLEMENT_DYNCREATE(CMyObject,CObject);

#ifdef _DEBUG

void CMyObject::AssertValid() const
{
	CObject::AssertValid();
	ASSERT(y==100);
}


void CMyObject::Dump( CDumpContext& dc ) const
{
	CObject::Dump(dc);
	dc << "Hello Dump ";
}

#endif

class CAlternativeObject : public CObject
{
protected:
 DECLARE_SERIAL(CAlternativeObject);	
};

IMPLEMENT_SERIAL(CAlternativeObject,CObject,1);


void main()
{
	CMyObject cm;
#ifdef _DEBUG
	cm.Dump(afxDump) ;
#endif
}

Я использовал стандартный контекст afxDump, поэтому весь вывод пойдет в окно отладки. Вот так:

224.gif (8255 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 18.08.2000