검색결과 리스트
디버그에 해당되는 글 1건
- 2008.11.21 Release에서 디버깅 하기 ...
글
저같은 경우 통신 프로그램을 개발 할 때
로컬에서 작업을 마치고 나서 실 서버에 서버 프로그램을 올립니다.
그런데 거의 대부분 실서버 올렸다고 바로 릴리즈 하지 못합니다.
쏟아지는 버그와 수정 사항들 ... (저만 그런가요? ^^; )
이럴때 디버깅 하기가 참 곤란 합니다.
다시 로컬 작업하던 컴퓨터에서 디버깅 모드로 디버깅하고 컴파일 하고
다시 실 서버로 올려서 돌아가는지 확인하고.... 에휴~~~~
그럴대 참으로 유용한 방법입니다.
디버그 모드에서 출력창에 스트링을 TRACE 구문이 있는데요
WIN32 API 중에 OutputDebugString()이라는 API가 있습니다.
이건 릴리즈에서도 출력창에 스트링을 출력할 수 있습니다.
그런데 이렇게 막연하게 설명하면은
출력은 어디서 봐????
이러실텐데요....
출력을 보는 프로그램은 Win32 API로 직접만들수도 있지만...
저 같은 경우는 DebugView 라는 프로그램을 사용합니다.
DebugView의 사용법은 헬프 파일을 살펴보세요.
암튼...
OutputDebugString 사용법은 참으로 간단합니다.
void WINAPI OutputDebugString(
__in_opt LPCTSTR lpOutputString
);
그냥 문자열을 넘기면 됩니다.
그런데 여기서 문제가 살짝 발생하네요.... 다 좋은데.... 전 printf 같이
인자도 넘기고 싶습니다.
그래서 전 이렇게 했습니다.
void OutputDebugPrintf(TCHAR* pszFormat, ...) { //가변인자의 길이를 모르기때문에 동적으로 생성하기 위한 포인터 변수 TCHAR* pBuffer = NULL; va_list args; va_start(args, pszFormat); // 가변인자 스트링의 길이를 구한다. int nLen = _vsctprintf(pszFormat, args) + sizeof(TCHAR); // 가변인자 길이만큼 문자열을 생성한다. pBuffer = new TCHAR[nLen]; // 복사한다. _vstprintf_s(pBuffer, nLen, pszFormat, args); va_end(args); // Windows에서는 필요없음 // 출력해준다. ::OutputDebugString(pBuffer); if (pBuffer) { delete[] pBuffer; pBuffer = NULL; } }
va_list, va_start, va_end는 printf와 같이 가변인자를 받아서 처리하는
매크로 들입니다.
이걸이용하면은 인자가 몇개든 출력할수 있습니다.
사용법은 printf와 같습니다.
'OS > Windows' 카테고리의 다른 글
Windows API만 사용해서 BN_CLICKED 메세지 발생시키기 (0) | 2009.08.12 |
---|---|
CoInitialize(), CoUninitialize() 호출시 주의사항 (0) | 2009.02.03 |
GetExitCodeThread 로 스레드의 상태를 알아보기 (0) | 2008.09.27 |
InternetSetOption의 Timeout 설정 버그 (0) | 2008.09.16 |
WM_DESTROY 메세지 (0) | 2008.07.21 |
RECENT COMMENT