Programing

릴리스 빌드의 Debug.WriteLine

lottogame 2020. 12. 1. 07:33
반응형

릴리스 빌드의 Debug.WriteLine


Debug.WriteLine정의하지 않고 릴리스 빌드에서 사용하는 방법이 DEBUG있습니까?


아니요,하지만 여기에서 살펴보기를 Trace정의 TRACE하고 사용하여 in release를 사용할 수 Trace.WriteLine.있습니다.

https://support.microsoft.com/en-us/help/815788/how-to-trace-and-debug-in-visual-c


아니요. DEBUG전 처리기 기호를 정의하지 않으면 적용되는 특성으로 Debug.*인해 컴파일러에서에 대한 모든 호출을 제거합니다 [Conditional("DEBUG")].

Trace.WriteLine그래도 고려 하거나 다른 로깅 기술을 원할 수 있습니다 .


여전히 DEBUG를 정의해야하지만 어셈블리 전체에서 수행 할 필요는 없습니다. 원하는 소스 파일에서만 정의 할 수 있습니다. 따라서 특정 클래스에서 디버그 로깅을 원하는 경우 해당 소스 파일에 대해서만 DEBUG를 정의 할 수 있습니다.

#define DEBUG
using System.Diagnostics;

...

class Logger
{
    void Log( string msg ){ Debug.WriteLine( msg ); }
}

예. 위의 주석에서 언급했듯이 표현식 트리를 사용하여 컴파일 시간 상수를 정의하지 않고 TRACE를 사용할 수 있습니다.

        var p = Expression.Parameter(typeof(string), "text");
        var callExp =
            Expression.Call(
              typeof(System.Diagnostics.Debug).GetRuntimeMethod(
                   "WriteLine", new [] { typeof(string) }),
              p);
        Action<string> compiledAction = Expression.Lambda<Action<string>>(
                                         callExp, p)
                                         .Compile();

그런 다음 언제든지 다음을 호출하여 Debug.WriteLine을 호출 할 수 있습니다.

        compiledAction("Debug text");

정적 메서드 호출을 사용하지 않고 대신 런타임에 동적으로 구성하여 컴파일러를 속이고 있습니다.

액션이 컴파일되고 재사용되기 때문에 성능 저하가 없습니다.

이것이 SharpLog에서 DebugLogger를 작성한 방법입니다.

관심이 있다면 여기에서 소스 코드를 살펴볼 수 있습니다 : https://github.com/prasannavl/SharpLog/blob/master/SharpLog/DebugLogger.cs

참고 URL : https://stackoverflow.com/questions/5419534/debug-writeline-in-release-build

반응형