문제

.NET 추적 및 디버그 클래스를 사용하는 방법에 대해 약간 혼란스러워합니다.

왜 디버그 대신 추적을 사용하지 않겠습니까?

Trace.TraceError()
Trace.TraceInformation()
Trace.Assert()

Debug.WriteLine()
Debug.Assert()

또한 릴리스 구성 모드에있을 때 디버그 문이 무시되지만 추적 문이 항상 적용되면 성능에 어떤 영향을 미칩니 까?

도움이 되었습니까?

해결책

가장 간단한 수준에서는 다른 컴파일 스위치가 있습니다. Debug.WriteLine 등은 당신이있는 경우에만 토글링됩니다 DEBUG 컴파일 기호 (릴리스 빌드에는 일반적이지 않음), 여기서 Trace.WriteLine 일반적으로 릴리스 빌드에도 포함됩니다.

그만큼 Trace Route에는 사용자 정의 가능한 추적 목록이 있으며 구성을 통해 배관 할 수 있습니다. Debug 일반적으로 청취자로서 디버거로갑니다. 물론 훨씬 더 많은 유연성을 제공하는 3 자 트레이스 시스템이 있습니다.

다른 팁

컴파일러 스위치를 사용하여 독립적으로 켜고 끌 수 있습니다. 프로젝트 속성의 빌드 페이지로 이동하면 일부 확인란이 있습니다.

나에게 경험하는 규칙은 실제 디버깅 정보에 디버그를 사용한다는 것입니다. 즉,이 시점에서 변수 x의 값은 ... 등에 대한 추적을 추적하는 추적 (더 많은 스팸과 같은)입니다.

당신이 말했듯이, 추적 통화는 릴리스 모드에있을 때만 실행됩니다. 릴리스 모드에서 컴파일에는 최종 응용 프로그램에서 원하는 성능 이점이 있으며 릴리스 모드를 켜는 다른 이유가있을 수 있습니다. 그러나 트레이스 콘솔에 정보를 녹음하려는 시간이있을 수 있으며, 이는 다음과 같은 응용 프로그램으로 볼 수 있습니다. Sysinternal의 dbgview. 이들은 일반적으로 로그 출력으로 보내지 않으려는 메시지 또는 사용자가 로깅을 끄는 경우에도 항상 디버깅 목적으로 사용할 수있는 메시지입니다.

성능 페널티를 부과하기 때문에 많은 정보를 추적 콘솔에 보내고 싶지는 않지만 일부 중요한 정보는 적절할 수 있습니다.

릴리스 환경에서 로깅 노력을 위해 Trace (관련 추적 스위치 포함)를 사용하는 경향이있었습니다. App.Config를 빠르게 조정하면 재 컴파일이 필요하지 않고 다른 수준의 로깅을 제공 할 수 있습니다 (어쨌든 문제가 발생할 수 있습니다. ) 또는 디버거를 부착해야 할 필요성. 특히 어떤 이유로 든 고객의 기계에서만 발생하는 문제에 특히 유용합니다.이를 사용하여 FTP 클래스 (기존 프레임 워크 1.1 일)에서 로그 아웃하는 데 성공적으로 두 회사 간의 네트워크 전송 문제를 진단하는 데 도움이되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top