개체 덤프 사용자 지정
이 항목은 다음 언어에 적용됩니다.
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
네이티브 전용 |
||||
Pro, Premium 및 Ultimate |
네이티브 전용 |
CObject에서 클래스를 파생시키는 경우 DumpAllObjectsSince를 사용하여 출력 창으로 개체를 덤프할 때 Dump 멤버 함수를 재정의하여 추가 정보를 제공할 수 있습니다.
Dump 함수는 덤프 컨텍스트(CDumpContext)에 개체 멤버 변수의 텍스트 표현을 작성합니다. 덤프 컨텍스트는 I/O 스트림과 유사합니다. 추가 연산자(<<)를 사용하여 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