본문 바로가기

프로그래밍 -----------------------/C,C++ 팁

디버깅을 위한 콘솔창 활용



닷넷 2005다.
 
먼저 코딩하고 있는 프로젝트의 속성 창을 띄운 후, 링커->시스템->서브 시스템 항목을 찾고
 
윈도우로 되어 있는 서브 시스템을 콘솔로 바꾼다. 그리고 아래와 같이 코딩한다.

 
 
#include "stdafx.h"
#include "GameCore.h"
CGameCore GameCore;
 
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT nCmdShow )

       GameCore.ProcessStart(hInst, E_Graphics_RESOLUTION::RESOL_640_480, 
                                          E_Graphics_COLORFORMAT::FMT_A8R8G8B8,
                                          false);
       return 0;
}
 
void main()
{
       WinMain(GetModuleHandle
(NULL), NULL, NULL, SW_SHOW);
}
 
WinMain함수와는 별도로 평소 콘솔모드 코딩하듯이 main()함수를 타이핑 하고
 
그 안에 WinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOW);를
 
타이핑한다. 그러면 디버깅을 위한 콘솔 모니터링 준비 끝
 
 
 
 
이제 stdio.h를 포함시키고 콘솔창에 모니터링할 내용을 printf()를 사용하여 콘솔에 보내면
 
된다. 그러면 위와 같은 결과를 볼 수 있다. 좌측 윈도우는 다이렉트X를 초기화하여 윈도우
 
모드로 띄운 창이고 우측 윈도우는 프로그램 상태를 모니터링하고 있는 콘솔창의 모습이다.
 
 
이것이 프로그램 종료 후의 콘솔 창 내용이다.
 
아래 코드는 실제 내가 사용하고 있는 코드로서 어떻게 콘솔창을 사용하고 있는지를 보여줄
 
수 있는 코드이다.
 
while(1) 
{   
      if(true == m_isGameQuit)
      {
           printf("Close Game by Window quit message\n");
           break;
      }
 
      if(GetKeyState(VK_ESCAPE))
      {
           printf("Close Game by pushing ESC key\n");
           break;
      }
 
      //윈도우 메세지 처리
      GetMessage( &msg, NULL, 0, 0 );
      TranslateMessage( &msg );
      DispatchMessage( &msg );
      this->AdvanceOneFrame(); // 게임의 한 프레임을 진행시킨다.
}
 
printf를 이용한 콘솔창 이용의 또다른 장점은 printf문의 내용 자체가 코드의 내용을 설명하는
 
주석의 역할도 겸해 준다는 점이다.