2015. 9. 30. 17:38ㆍIT-개발/winapi 및 MFC
출처 : http://egloos.zum.com/tiger5net/v/5328868
윈도우 프로그래밍을 할 때, 디버그 모드에서는 잘 돌아가던 프로그램이 릴리즈 모드에서 이상한 증상을 보이면 참 난
감하다. 물론 Visual Studio 2005는 릴리즈 모드에서도 디버깅이 가능한 것처럼 보이지만 실제로 해보면 코드추적(tracing)도 잘 안 되고, 변수값도 이상하게 찍히기 때문에 별로 도움이 안 된다.
인자로 넘긴 문자열을 Visual Studio 출력창에 찍어주는 OutputDebugString 함수를 쓰면 예전에 printf()로 하던 것처럼 디버깅할 수 있다. 특히DebugView라는 프로그램을 실행하면 이 함수의 출력값을 -Visual Studio 출력창이 아닌- 윈도우 화면으로 확인할 수 있기 때문에 다른 사람의 컴퓨터에서 문제가 생겼을 때 아주 유용하다.
아래와 같이 함수를 하나 만들어 두면,
void myOutputDebugString(LPCTSTR pszStr, ...)
{
#ifdef _MY_DEBUG
TCHAR szMsg[256];
va_list args;
va_start(args, pszStr);
_vstprintf_s(szMsg, 256, pszStr, args);
OutputDebugString(szMsg);
#endif
}
이렇게 사용할 수 있다.
int n = 5;
TCHAR s[80] = _T("hello");
myOutputDebugString(_T("n = %d, s = %s\n"), n, s);
단, 개발 완료 후 최종 사용자에게 배포할 때에는 이 OutputDebugString()이 호출되지 않도록 주의해야 한다. 너무나 당연한 것이, 입장을 바꾸어 내가 디버깅을 하려는데 DebugView 창에 듣도 보도 못한 프로그램이 이상한 메시지를 쏟아놓고 있으면 얼마나 짜증이 나겠는가 말이다. 국내의 한 상용 프로그램은 그 처리를 제대로 안 한 덕분에, 내가 아는 어떤 분으로부터 걸핏하면 "디버그 계의 슈뤠귀"라는 소리를 듣는다. 그것이 바로 위의 함수에서 _MY_DEBUG라는 값을 따로 정의해서 사용하는 이유다.
'IT-개발 > winapi 및 MFC' 카테고리의 다른 글
CComboBox dynamic 생성 / AddString (0) | 2015.11.18 |
---|---|
CStatic ...이리저리사용하기 (1) (0) | 2015.10.02 |
DLL 만들때, 정적 라이브러리에서 MFC 사용 !!!(펌) (0) | 2015.09.24 |
특정 폴더를 한번에 삭제하기(폴더안 파일까지 포함) [펌] (0) | 2015.09.18 |
CListCtrl 포커스 해제시 selection color 유지하기 (0) | 2015.08.21 |