2014-09-30 1 views
4

내가 이해하는 한, System.Console은 기본적으로 STDOUT에 쓰지만, System.Diagnostics.TraceSystem.Diagnostics.Debug은 어떨까요? 기본 동작은 무엇이며 어떤 방식으로 구성 할 수 있습니까?System.Diagnostics.Trace, System.Diagnostics.Debug 및 System.Console의 차이점은 무엇입니까?

다른 사람들이 (인터넷에서) 다른 것들을 사용하는 것처럼 보이지만, 내가 발견 한 대부분이 틀렸다고 가정하고 있습니다. 왜냐하면이 각각에 대해 구체적인 의미가 있어야하기 때문입니다. 맞습니까? 그렇다면 ASP.NET이나 WPF와 같은 특별한 프레임 워크가 있습니까?

또 하나의 마지막 질문으로, 이들 중 어느 것을 사용할 지 선택하기위한 엄지 손가락 규칙은 무엇입니까?

+0

대부분의 사람들은 .Net에서 내장 추적 지원을 건너 뛰고 NLog와 같은 더 큰 라이브러리로 이동하는 것이 좋다고 생각합니다. .Net 추적을위한 좋은 링크는 [Simple and Easy Tracing in .NET] (http://blog.stephencleary.com/2010/12/simple-and-easy-tracing-in-net.html). –

답변

15

DebugTrace은 모두 동일한 위치의 Listeners 컬렉션으로 기록합니다. 기본적으로 Visual Studio의 디버그 창으로 라우팅되지만 you can put code in your app.config file은 디버깅하지 않을 때 다른 위치로 리디렉션합니다.

DebugTrace의 차이는 DEBUG 컴파일 기호가 설정되어있을 때 심볼이 방법은 호출되지 않습니다 설정되지 않은 경우 Debug의 모든 메소드는 (출시 떨어져, 디버그에 기본값)를 쓰는 당신의 암호. 추적은 TRACE 기호를 찾습니다 (디버그 및 릴리스 모두에 대해 기본값은 켜짐). 그 외에는 두 클래스가 동일합니다. 사실 당신은 단지 내부 정적 속성 하나를 사용하는 따기에 관해서는 TraceInternal.Listeners

를 가리 그것은 또한 모두 같은 Trace.Listeners을 수정하는 새로운 리스너를 추가 Debug.Listeners을 수정하면 릴리스 및 디버그에 표시하는 진단 정보를 원하는 경우 방법? 추적, 디버그 만 사용 하시겠습니까? 디버그를 사용하십시오. 디버거를 연결하지 않고 최종 사용자에게 표시되도록 하시겠습니까? 콘솔을 사용하거나 콘솔 추적 수신기를 추가하십시오.

+0

+1. 기본적으로 출력을 통해 정확한 결과를 얻으려면 [OutputDebugString] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx)을 통해 "표시 할 디버거"로 보내십시오.) 및 VS 일반적으로 "디버거"일 수 있지만 실제로 WinDbg 같은 다른 디버거 또는 [DebugView] 같은 특수 도구를 볼 수 있습니다 (http://technet.microsoft.com/en-us/sysinternals/bb896647) –

관련 문제