본문 바로가기

3.구현/VC++

리다이렉션이용한 디버깅 메시지 출력

단순히 문자열 하나만 출력하는 디버깅 메시지는 단순한다. 그렇지만 디버깅을 하다보면, 변수의 값이나 포인터 등을 여러 형식의 포멧에 맞춰 출력하게된다.

MFC를 사용한다면 CString에서 Format()를 사용하면되고, 일반 c라면 sprintf()등을 사용하면된다. 또는 MFC에서 TRACE 매크로를 사용해도된다. c++에서 MFC의 CString은 별로 사용하고 싶지않거나 사용할 수 없는 경우라면 어떻게 될까? sprintf()를 이용할까? 그러기에는 c++답지 않고 세련되지도 않고...

그래서 c++에서 cout등에 사용하는 리다이렉트("<<")를 사용할 수 있는 방법을 살펴보자.

작성일: 2009.08.14 (http://ospace.tistory.com/), ospace114@엠팔.컴

코드

그냥 코드를 보자. stl를 좀 공부했다면 쉽게 알 수 있다.

#include <sstream>
#include <Windows.h>

#define DEBUG_MSG(msg) {\
    std::ostringstream oss;\
    oss << msg << "\n";\
    OutputDebugString(oss.str().c_str());\
}

뭐~ 별거 없다. ostringstream를 사용하였다. 그리고, 매크로로 사용하면된다.
msg에 들어올 수 있는 값으로는 std::string이나 일반 텍스트, 리다이렉트("<<"), 그냥 숫자, 변수 등이 올 수 있다.
만약, 포멧을 지정하고 싶다면 cout에서 사용하는 포멧 지정자를 사용하면된다.

출력는 OutputDebugString()로 했다. 뭐 나름대로 자기가 사용하고 싶은 출력장치로 하면되겠다.

결론

별다른게 없다. 잘 사용하면 된다.
즐프하시길~~ospace

반응형