2009년 01월 22일
CObject::Dump

보통 디버깅을 할 때면 적당한 위치에 브레이크 포인트를 찍고 변수의 값들을 눈으로 하나씩 확인해 나가며 문제가 되는 부분을 찾아냅니다. 하지만 쓰레드 또는 컨테이너에 담겨있는 데이터들을 보기 위해서는 TRACE 매크로 함수를 주로 사용할 것입니다.(적어도 저는 설명 드린 방법을 즐겨 사용합니다.) 이번에 ASSERT_VALID 매크로에 대해서 공부 할 때 참고했던 블로그(나비야 나비야 ~)에 Dump에 대한 내용도 함께 포스팅 되어 있었는데요. 이 함수는 TRACE 매크로 함수와 같은 역할을 하지만, Output창에 출력할 내용을 클래스 내부에서 관리할 수 있는 장점이 있으며 파일로도 출력할 수 있는 기능이 갖추고 있습니다.

Dump함수는 CObject 클래스에 가상함수로 선정 및 정의 되어있습니다. 이 함수 또한 이전에 포스팅 했던 ASSERT_VALID 매크로 함수와 같이 다형성을 이용하여 상위 클래스의 멤버 변수의 내용도 함께 Output창에 출력할 수 있습니다. Dump 함수의 원형을 다음과 같으며 인자로는 MFC에 전역변수로 선언되어져 있는 afxDump를 전달하면 됩니다. 여기서 한가지 주의할 점이 있는데, Dump함수는 물론 afxDump 전역 변수 또한 디버그 모드 일때만 선언이 된다는 것입니다. 즉, Release 모드에서는 사용할 수 없습니다. 이를 위해서 Dump 함수를 호출하기 전 #ifdef _DEBUG #endif 매크로를 코딩한 후 이 안에서 Dump함수를 호출하도록 합니다.

아래는 위 내용을 간단한 예제로 만들어 본 코드입니다.


// Dump.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

class CDump : public CObject
{
public:
 CDump(int i, int j)
 {
  this->i = i;
  this->j = j;
 }
 ~CDump() {}

#ifdef _DEBUG
 virtual void Dump(CDumpContext& dc) const
 {
  CObject::Dump(dc);

  dc<<_T("\n================= Start, CDump =================\n\n");
  dc<<_T("i : ")<<i<<_T("\n");
  dc<<_T("j : ")<<j<<_T("\n");
  dc<<_T("\n=================The end, CDump =================\n\n");
 }
#endif

protected:
 int i;
 int j;
};


int _tmain(int argc, _TCHAR* argv[])
{
 CDump* dump = new CDump(100, -100);

#ifdef _DEBUG
 //
 // CDumpContext 클래스의 전역 객체 변수 afxDump를 인자로 넘겨 줍니다.
 //
 dump->Dump(afxDump);
#endif

 delete dump;

 return 0;
}

 

* 실행 결과


* 참고 웹 사이트

    http://artwook.tistory.com/entry/ASSERTVALID-AssertValid-Dump

* 예제 프로젝트

    Dump.zip
by greenfrog | 2009/01/22 23:02 | C++ / WIN32 / MFC | 트랙백 | 덧글(3)
트랙백 주소 : http://greenfrog7.egloos.com/tb/1325054
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by Odlinuf at 2009/01/22 23:25
오랜만에 업데이트된 것 보고 들어왔는데...글은 글인데 읽을 수 없을 뿐이고! 난독증 의심스럽고!
Commented by greenfrog at 2009/01/23 08:19
ㅋㅋ 요즘 한참 프로젝트가 바쁘다 보니 ... 다른건 거의 못하고, 일하다 공부한 내용이나 겨우 짬을 내서 올린답니다 ㅜㅜ
곧 설인데 잘 보내시고 새해 복 많이 받으세요 ^^
Commented by 코즈 at 2009/06/03 19:56
좋은 정보 감사합니다^^

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>