ofLog로 디버깅


#1

이 토픽은 이곳에서 이야기하는 것이 더 좋을거 같아 facebook에서 가져왔습니다. :slight_smile:

Lu Na‎>>

많은 분들이 아시리라 생각하고 ^^; 디버깅할때 혹시나 도움이 될까 해서 간단히 남겨요.
거리 계산이나 마우스움직임을 실시간 확인하고싶은때 값산출을 ofLog(); 를 애용합니다.
ofLogNotice(); 도 유용하게 쓸수있습니다.
간단한 보기로 osc 를 통해 데이터 값을 받을때.

ofLog(OF_LOG_NOTICE, "postionX value is:" ofToString(oscX));
혹은,
ofLogNotice("osc:");
ofLogNotice(ofToString(oscX));

짧고 간단히 실시간으로 확인 하실수있습니다.

더 좋은 메쏘드가 있다면 공유부탁드림니다. :wink:

Philip Liu>>

cout<<"postionX value is:"<<oscX<<endl;

이 경우에는 이게 더 간단해 보이는데, 이거보다 ofLog가 우수한건가요?
string으로 변환도 해야 해서 막연한 생각으로는 효율이 더 안좋지 않을까 하는데,
음 애초에 중요한 부분이 아니라고 생각해서 ofLog에 대해서는 진지하게 생각해본적이 없군요.

Jungun Kim>>

ofLog는 ofSetLogLevel을 사용하여 레벨을 설정함에 따라 디버깅이 편하긴 하죠.
cout은 말씀하신데로 스트링 변환할 필요가 없는게 장점이라 저도 자주 애용합니다.

Philip Liu>>

네, 여러가지 레벨을 설정할수 있더군요.
저같은경우는 어떤 값을 프린트 하는 경우는 지금 이 코드에서 이 알고리즘이 제대로된 값을 뽑아내고 있나, 이 벡터의 사이즈는 몇개인가, osc는 잘들어오고 있나 등 같은 이유가 90%여서 cout을 많이 쓰고 잘 안쓰게 되더군요.
모니터 해야 할 값이 많아지면 ofDrawBitmapString으로 화면 자체에 뿌려서 모니터하고요.
ofLog는 나중에 혹시 자체 라이브러리를 제작하게 된다면 많이 쓰게될지도…

Lu Na>>

유용한 팁들을 많이 주셔서 감사합니다 :slight_smile:
우선 제가 애용하는 메쓰드에는 많은 허점들이 있을줄압니다.
프로젝트에따라 안맞을수도있구요. (절대로 우수한게아님니당 ^^; )
개인적으로 키네틱 카메라나 다른 디바이스를 자주사용해서 앞에 언급했듯이 물채간의 거리계산이나 마우스값을 맵할때 ofLog(); 를 자주쓰는것뿐입니다 .^^; 한줄에 끝내버리니 저로선 편하더라구요.
그리고 래벨을 이용하면 좀더 다양한 안목으로 생각할수있는게 좋아서 자주 이용합니다.
재밌는것은 반대로 전 OF 에서 cout 을한번도 사용한적이없네요.^^; 이유는 cout 을쓰면 OF 를 사용하고있다가아니라 c++ 를 한다는생각이 들어서 입니다. :yum: 멋지고 다양한 의견 에 감사합니다.

Won Jong Un>>

저도 조금 끼어 들어도 될런지요? ^^; cout , ofLog 모두 괜찮습니다.
솔직히 정확히 ofLog 가 어떻게 구성 되었는지 깊게 들어가 본 적은 없습니만, (그래서 이렇게 토론에 끼어도 될지 모르겠습니다만), 보통 다른 개발 플랫폼, 프레임워크 에서 제공 하는 로그 메소드 들은 필수 적인 한가지 기능이구현 되어야 된다고 봅니다.
바로 콘솔을 볼 수 없는, 볼 필요가 없는 상황 , 즉 릴리즈가 되어 디바이스에 들어 갔다던지 하는 상황에서는 컴파일
단에서 로그 명령을 무시 하는 분기가 되어 있어야 합니다.
하지만 cout 은 이러거나 저러거나 무조건 그 줄을 시행 할 것 입니다.
그에 따라 CPU는 불필요한 연산을 개미눈꼽만큼이라도 더 해버리는 것 이겠죠? (물론 별도의 설정이 들어 간다면
아니겠지요.) 따라서 만약 OF가 위의 사항을 준수 하여 개발이 되었다면, 상태에 따라 로그 출력을 유지 해야 한다면, ofLog가 유용 할 것으로 생각 됩니다.

Philip Liu>>

앗 그런데 이 글 때문에 ofLog에 대해서 처음으로 찾아보게 되었는데,
ofLog() << "number: " << oscX; 식으로 cout스타일로도 가능하고 심지어 printf스타일로도 가능하군요.
위에 분이 말씀하신 분기 기능은 정확히 모르겠지만, 잘 안쓰던 이유가 형변환이 귀찮아서 였는데 레벨설정에 크래쉬시에도 유용하니 앞으로 이쪽으로 전향? 하게 될것 같습니다. 이 글 덕분에 얻어알아가네요 감사합니다

Jungun Kim>>

ofLog의 내부는 보시면 아시겠지만 각 레벨에 맞게 ostream과 cout을 사용해 뿌려주는겁니다. Won Jong Un
님이 말씀하신 것 같이 ofLog의 장점은 불필요한 연산을 줄이기 위해 레벨 설정이 되어 있는것이기 때문에 디버깅만을 생각한다면 어느쪽이나 상황에 맞게 사용하면 괜찮을 겁니다.
저도 급하게 어떤 값을 확인하고 싶을땐 cout을 적고 나중에 커멘트 아웃해버립니다. 때론 ofLog의 레벨도 방해가 될 때가 있거든요. :yum:


#2

사실 저 또한 귀찮아서 cout으로 그때그때 쓰고 코멘트처리를 합니다 ㅎㅎ


#3

저 위에 있는 “Won Jong Un” 이 접니다 ㅋ


#4

ㅋㅋㅋㅋㅋ


#5

cout 보다는 좋긴 한 것 같아요.

레벨이 있어서 세세한 것부터 치명적인 것까지 볼 수 있기 때문에요.
그리고 파일로 로그할 수도 있어서 그점 역시 장점인것 같네요


#6

저도 마찬가지입니다. 개인적인 사용엔 cout을, 업무용엔 ofLog를… :imp:


#7

ofLog는 쳐다본 적도 없었는데, 체계적으로 쓴다면 굉장히 유용할 수 있겠다는 생각이 듭니다.

종종 코멘트 다는 것과 변수 이름 정하는 것에 실제 코딩보다 더 많은 시간을 쓰고 있는데 (기억력이 점점 없어지면서 코멘트에 더욱 의존을 하게 되네요 ㅠㅠ), ofLog의 레벨 기능까지 쓰게되면 망할지도 모르겠지만요. ㅋㅋㅋ