이것은 정말 두 가지 질문입니다, 나는 가장 쉬운 것으로 시작할 것입니다. 이 간단한 프로그램의 끝에서 액세스 위반 예외가 발생합니다. 이것은 MSVC6에 있습니다 (예, 알고 있습니다 ...).C++ 추적 로깅 질문, fstream 액세스 위반 질문
int main()
{
std::fstream logFile("clog.txt");
std::clog.rdbuf(logFile.rdbuf());
// ... use clog ...
logFile.close(); // I've tried removing this, same problem.
return 0;
}
두 번째 질문은 std :: clog를 어떻게 적용하려고하는지입니다. 꽤 간단한 추적 기능을 구현하고 싶습니다. 디버깅 중에 만 활성화됩니다. "해제 모드"동안의 추적은 너무 느립니다.
내 현재의 생각은 기본적으로 : 구성이 디버그 또는 릴리스 모드인지에 해당 _DEBUG_
이나 뭐 같은 전처리 상수가있는 경우
#define TRACE_LOG_TOGGLE 1
#if TRACE_LOG_TOGGLE
#define TRACE_LOG(a) // something that ultimately uses std::clog
#else
#define TRACE_LOG(a) // empty.
#endif
는 첫째, 사람이 MSVC6 알고 있습니까? 프로그래머가 수동으로 토글하지 않아도된다. (그러나 사소한 문제 다.)
더 자세한 질문은이 매크로를 수행하는 템플리트 마법 방법이 있는지입니다. 나는 매크로로 각각의 모든 기능을 시작하는 약간의 네안데르탈 인을 느낀다.
세 가지 중요한 사항 :
(1)이 프로그램은 DLL에 저장됩니다. 추적 기능이있는 기능과 기능이없는 기능을 함께 사용하는 것이 좋을 것입니다. 사실 그것이 이상적 일 것입니다. 바이너리가 코드 유지 관리 능력을 향상시키는 한 두 배의 크기라면 상관하지 않습니다.
(2) "릴리스 모드"기능에는 추적 로깅을위한 NOOP가 있어야합니다.
(3) 그러나 모든 기능을 추적 로깅 매개 변수가있는 템플릿 기능으로 만들고 싶지는 않습니다.
언제나처럼, 미리 감사드립니다.