programing

디버그 구성 시에만 실행할 .NET 코드 필요

megabox 2023. 5. 29. 10:30
반응형

디버그 구성 시에만 실행할 .NET 코드 필요

웹에서 API에 액세스하는 코드가 있습니다.API의 매개 변수 중 하나는 내가 테스트 중이라는 것을 그들에게 알릴 수 있습니다.

테스트할 때만 이 매개 변수를 내 코드에 설정하고 싶습니다.현재, 저는 릴리스 빌드를 할 때 코드를 주석으로 달 뿐입니다.

빌드 구성에 따라 자동으로 이 작업을 수행할 수 있는 방법이 있습니까?

솔루션

다음 중 하나를 사용할 수 있습니다.

1:Conditional기여하다

특성은 지정된 조건부 컴파일 기호가 정의되지 않은 경우 메서드 호출 또는 특성을 무시해야 함을 컴파일러에 나타냅니다.

코드 예:

[Conditional("DEBUG")]
static void Method() { } 

1b:Conditional로컬 함수의 속성(C# 9)

C# 9부터는 로컬 함수에 속성을 사용할 수 있습니다.

코드 예:

static void Main(string[] args)
{
    [Conditional("DEBUG")]
    static void Method() { }

    Method();
}

2:#if전처리기 지시문

C# 컴파일러가 프리프로세서 지시어를 발견하고 그 다음에 #endif 지시어를 만나면 지정된 기호가 정의된 경우에만 지시어 사이의 코드를 컴파일합니다.C 및 C++와 달리 기호에 숫자 값을 할당할 수 없습니다.C#의 #if 문은 부울식이며 기호가 정의되었는지 여부만 테스트합니다.

코드 예:

#if DEBUG
    static int testCounter = 0;
#endif 

3:Debug.Write방법들

Debug.Write (및 )는 수신기 컬렉션의 추적 수신기에 디버그에 대한 정보를 기록합니다.

및 을 참조하십시오.

코드 예:

Debug.Write("Something to write in Output window.");

메모들

사용에 주의#if비디버그(예: 릴리스) 빌드에서 의도하지 않은 상황을 발생시킬 수 있으므로 지시.예를 들어, 다음을 참조하십시오.

    string sth = null;
#if DEBUG
    sth = "oh, hi!";
#endif
    Console.WriteLine(sth);

이 경우 디버그가 아닌 빌드는 빈 메시지를 인쇄합니다.하지만 이는 잠재적으로 발생할 수 있습니다.NullReferenceException다른 경우에

더 읽기

참고 항목

외부 응용 프로그램에서 디버그 정보를 캡처할 수 있는 DebugView 도구도 있습니다.

예, 코드를 랩으로 감습니다.

#if DEBUG
// do debug only stuff 
#else
// do non DEBUG stuff
#endif

"C# 컴파일 기호"에 대한 Google

Studio는 Visual Studio를 으로 정의합니다.DEBUG디버그 구성에 있는 경우.원하는 기호를 정의할 수 있습니다(프로젝트 속성, 빌드 탭 참조).전처리기 지시문을 남용하는 것은 좋지 않으며 코드를 읽고 유지하기가 매우 어려울 수 있습니다.

저도 이와 같은 문제가 있었고, 함께 사용한 솔루션은 다음과 같습니다.

if (System.Diagnostics.Debugger.IsAttached)
{
    // Code here
}

이는 기술적으로 프로덕션에서 디버거를 연결하고 해당 코드를 실행할 수 있음을 의미합니다.

#if #endif 지시어 외에도 조건부 속성을 사용할 수 있습니다.속성으로 메서드를 표시하는 경우

[Conditional("Debug")]

응용프로그램이 디버그 모드로 빌드된 경우에만 컴파일되고 실행됩니다.아래 설명에서 언급한 것처럼 메소드에 void return 유형이 있을 때만 작동합니다.

여기 비슷한 결과를 가진 다른 게시물이 있습니다: http://www.bigresource.com/Tracker/Track-vb-lwDKSoETwZ/ .

나은 설명은 http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx 에서 확인할 수 있습니다.

// preprocessor_if.cs
#define DEBUG
#define MYTEST
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !MYTEST)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && MYTEST)
        Console.WriteLine("MYTEST is defined");
#elif (DEBUG && MYTEST)
        Console.WriteLine("DEBUG and MYTEST are defined");
#else
        Console.WriteLine("DEBUG and MYTEST are not defined");
#endif
    }
}
public int Method ()
{
#if DEBUG 
   // do something 
#endif
}

다음은 안전하게 사용할 수 있는 항목입니다.

var isDebug = false;
#if DEBUG
    isDebug = System.Diagnostics.Debugger.IsAttached;
#endif

if (isDebug) {
    // Do something
}

이 기능은 asp.net 에서 작동합니다.

if (System.Web.HttpContext.Current.IsDebuggingEnabled)
    //send email to developer;
else
    //send email to customer;

Rick Strahl @ 탐지-ASPNET-디버그 모드에서

언급URL : https://stackoverflow.com/questions/3409598/need-net-code-to-execute-only-when-in-debug-configuration

반응형