MFC에서 콘솔 디버깅 하기

반응형
728x90
반응형
 
Introduction

Windows기반에 MFC기반에서 모듈을 개발하기 시작할 때, 가끔 Log 데이터를 확인하고 싶을 때가 있습니다. 이때, 콘솔창을 이용하여 출력할 수 있는 방법이 있습니다. 아주 간단한 방법이며, 콘솔과 관련한 추가자료는 Win32 API관련 도서를 참고하시면 이와 관련된 추가 작업들을 확인 할 수 있습니다.  저는 콘솔에서 Gotoxy() 함수와 색상을 변경할 수있는 함수를 만들어서 사용하고 있는데, 아직 코드 정리가 미흡하기때문에 추구 공개하기로 하고 이번 포스팅은 콘솔창을 띄우는 방법에 대해 알아보도록 하겠습니다. 
 
 
콘솔창 띄우기 방법 1

 
stdafx.h 파일에 아래 내용 추가 
 
#ifdef _DEBUG
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
#endif
 
stdafx.h 파일이 아니더라도, 헤더파일에 추가를 하시면 됩니다. 1번의 방법은 아래 2번의 방법과 동일하니 둘중 하나만 하셔도 됩니다.  라고 온라인에 많이 나오는데 VS버전에 따라 다른 것일지는 테스트는 못하였지만, 저는 2가지 방법 다 설정하여 사용하고 있습니다. 
 
콘솔창 띄우기 방법 2

 
  • property > Linker > System > SubSystem 에서 Console 추가 
 
두번째 방법은 Property설정에서 변경하는 것입니다. 설정에 따라, MFC UI가 뜰때, 콘솔창이 바로 뜨는 경우가 있어 조금 테스트를 해보았습니다. 
 
 
유의사항

 
#조건 1
  • 1번 방법의 코드가 없을 경우
  • SubSystem : console, Windows 
  • printf, puts 함수 등이 적용되지 않음 
 
 
첫번째방법으로 설명드린 코드가 없을 경우 C기반에서 사용하는 printf(), puts() 함수가 적용되지 않더군요. 
 
void CConsoleDebugMgr::WriteANSI(char *str)
{
       WriteFile(m_hOut, str, strlen(str), &m_dw, NULL);
}
void CConsoleDebugMgr::WriteUniCode(char *str)
{
       WriteConsole(m_hOut, str, strlen(str), &m_dw, NULL);
}
void CConsoleDebugMgr::ReadANSI(char *str, int len)
{
       ReadFile(m_hIn, str, len, &m_dw, NULL);
}
void CConsoleDebugMgr::ReadUniCode(char *str, int len)
{
       ReadConsole(m_hIn, str, len, &m_dw, NULL);
}
 
저는 상위 코드를 이용하고 있습니다. 필요에 따라 사용하시면 됩니다. 전체 코드를 올린 것이 아니기때문에 Win32 API함수를 검색하여 추가 필요한 부분은 찾아서 사용하시면 됩니다. 
 
 
#조건 2
  • 1번 방법의 코드가 있을 경우
  • SubSystem : console, Windows 
  • printf, puts 함수 등이 적용 됨
 
 
조건 2는 2가지 방법을 설정하는 것으로서 printf() 함수를 사용하여 출력 됩니다. Win32 API까지는 아니여도 간단하게 테스트 할 수 있기때문에 다른 추가사항은 없습니다.  결론은 property에서 수정을 해도 변함이 없기때문에 1번방법의 코드를 추가하는 것을 권장합니다. 물론 기타 다른 개발환경에 따라 다를 수 있겠지만, 확인 후 진행하시면 좋을 것 같네요. 
 
아래의 파일을 실행하여 확인 할 수 있습니다. 
 
 
728x90
반응형

댓글

Designed by JB FACTORY