릴리스 빌드의 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
'Programing' 카테고리의 다른 글
SQL 조인 테이블 명명 규칙 (0) | 2020.12.01 |
---|---|
IQueryable, List, IEnumerator의 차이점은 무엇입니까? (0) | 2020.12.01 |
1 행 이상 (0) | 2020.12.01 |
Java 오류 : "보안 설정으로 인해 로컬 응용 프로그램 실행이 차단되었습니다." (0) | 2020.12.01 |
Apache / Django / WSGI 잘못된 요청 (400) 오류 디버깅 (0) | 2020.12.01 |