[ CnUnix ] in KIDS 글 쓴 이(By): swhan (Nameless1) 날 짜 (Date): 2004년 11월 10일 수요일 오전 11시 26분 30초 제 목(Title): iostream vs printf 질문입니다. 그냥 의견을 듣고싶습니다. 지금 작성중인 C++코드에 디버그코드가 약 1000개정도 있습니다. debug level도 다양하고 컴파일 옵션에 따라 일부 또는 전부가 사라지도록 되어 있죠. 이거 외에 runtime에 logservice를 돌리고 있습니다. 이건 좀 머시기한 표준에 따라 CORBA로 log를 날려야 합니다. (구현은 모두 끝나있습니다.) 수는 약 수백개 내외입니다. 현재는 log를 남기기 위해서 string으로 메세지를 작성하고 이를 debug와 CORBA log로 2번 날립니다. 기타 다른 부분에서는 debug를 printf처럼 이용하고 있습니다. 현재, debug와 corba log를 각각 호출하는 것이 마음에 들지 않습니다. 그냥 적당한 level로 한 번 호출하고, 어딘가 다른 곳에서 corba log에 대한 초기화를 한다면 그 process는 stderr가 아닌 CORBA로 log를 날리도록 만들고 싶습니다. (corba연결에 실패하면, 즉 초기 디버깅 과정에서는 stderr로 출력을 해야 합니다.) 지금까지 계획은 이렇습니다. streambuffer와 ostream을 상속받아서 debug level 연산자를 추가하고 << 오퍼레이터를 가로채서 상황에 따라 stderr또는 corba로 날리도록 내부에서 판단하게 만드는겁니다. ostream은 MACRO로 compile시에 제외하는 방법도 같이 이용합니다 문제는 성능입니다. 다른 컴파일러는 어떨지 모르지만 g++로는 ostream이 너무 느립니다. :( 상황에 따라 다르지만 제 테스트환경에서는 3~5배정도 시간이 더 걸립니다. 지금까지 작성한 코드를 프레임웍으로 이용하여 어플리케이션이 계속 덧붙여나가야 하는 상황이라 현재 코드를 깔끔하게 정리하는 것으로는 문제가 해결되지 않습니다. 어플리케이션의 작성은 제가 하는 것이 아니라는게 고민의 시작입니다. :( 선택은 다음 3가지중에 하나가 될 것 같습니다. 1. 현재 상황 그대로 둔다. 필요할때마다 CORBA log는 별도로 이용한다. 이런 주의사항을 자세히 문서화한다. 2. 속도가 조금 느리더라도 ostream을 이용하는 방법으로 변경하여 구조적으로 비교적 깔끔한 형태로 간다. 3. printf계열의 함수와 function pointer, va_arg등의 도배를 통해 위 기능을 구현한다. va_arg가 아무리 느려도 ostream보다는 빠를 것이다. 모양은 조금 보기 나쁘지만 ostream의 느린 속도는 용납 못 한다. 여러분은 어떤 방안을 선택하시겠습니까? 참 개발 환경은 현재는 Linux desktop이지만, 추후 embedded system으로 변경되며 OS는 미정입니다. 다만, memory와 cpu는 embedded system치고는 비교적 충분하리라 예상하고 있습니다. @ 2번의 경우 printf계열 debug message를 모두 ostream으로 변경해야 하지만, 그건 그리 큰 일이 아니라 보고 있습니다. 어차피 모든 코드의 comment를 정리중이고 line by line으로 검토하면서 불필요한 코드를 제거하고 있습니다. 동시에 debug message도 정리중입니다. |