2010-06-16 3 views
5

AC# 프로그램에 "IF DEBUG"조건을 어떻게 두어 디버그 모드에서 실행 중이고 프로그램이 아닌 경우 코드 블록을 실행하면 런타임에 코드 세트를 무시합니다 디버그 모드에서 실행 중입니까? 이것이 사용될 수있는 상황은 블록의 시작에서 타임 스탬프가 찍히고 마지막에 다른 타임 스탬프가 찍히는 경우입니다. 런타임에는 거의 차이가 없습니다. 그러나 디버그 모드에서 코드를 단계별로 실행하는 경우 코드가 많이 달라지며 "if 블록"의 오류 조건이 실행되어 일부 코드가 비정상적으로 실행될 수 있습니다.C# 프로그램에 "IF DEBUG"조건을 어떻게 넣으시겠습니까?

#IF DEBUG 

//code goes here 

#endif 

이, 이것은 런타임 것조차 컴파일되지 않습니다 그 블록의 코드를 의미 처리기 지시문이 있고하지 않습니다되어

답변

15

당신은이 같은 블록에 코드를 넣어 포함되지 않습니다.

당신이 디버깅하는 경우 런타임에 확인하려는 경우, 당신은 Debugger.IsAttached

+2

+1 "디버거의 경우" – Earlz

+2

디버거의 경우.IsAttached'라고 말하면서, 프로덕션 사이트에서 원격 디버깅을하는 것은 사실 일 것입니다. 네, 보통 당신이 이것을 원하지 않는다는 것을 알고 있습니다 만, 무엇이 잘못되었는지를 파악할 수없는 일부 경우에는 도움이 될 수 있습니다. 원격 디버깅을 사용하는 경우 "디버그"코드가 프로덕션 환경에서 문제를 일으키지 않도록하십시오. –

+0

+1 @Nelson : 원격 디버깅 (디버거 연결)은 Windows 서비스를 디버깅하는 유일한 방법입니다. –

5

는 전 처리기 명령의 #if를 사용하여 확인할 수 있습니다

#if debug 
    // run in debug mode 
#else 
    // run if not in debug mode 
#endif 
+0

가 작동하지 않습니다. OP ... 실행시 ... – KevinDTimm

0
#if DEBUG 
     // something 
#elif 
     // some other thing 
#endif 
+0

가 작동하지 않습니다. OP ... 실행시 ... – KevinDTimm

+0

@KevinDTimm : 아, 그 시점을 놓치 셨습니다. 나에게 신경 쓰지 마라, 나는 단지 대답을 잘못한다. – simendsjo

3

당신은 또한

을 사용할 수 있습니다
[Conditional("Debug")] 

속성에 대한 속성입니다.

+0

OP가 작동하지 않는다. 그래서 실행 시간에 ... – KevinDTimm

0
#if (DEBUG) 
... 
#else 
... 
#endif 

는 여기를 참조하십시오 http://bloggingabout.net/blogs/rick/archive/2005/03/10/2396.aspx

+0

OP가 작동하지 않는다. 그래서 실행시에 ... – KevinDTimm

+0

@KevinDTimm : 질문자가 "런타임에"라고 말하지만, 왜 자신의 구체적인 시나리오가 전 처리기 지시문으로 처리 될 수 없는지를 보지 못했습니다. 디버그 모드에서 실행될 때'it (ItTookALongTime)'을 건너 뛰고 싶습니다. 왜냐하면 디버그 모드에서는 오래 걸릴 것으로 예상되기 때문에 ...'if (ItTookALongTime)' 디버깅을 위해 컴파일 할 때 제외됩니까? –

+0

그가 요구 한 것이 아니기 때문에 : 그는 디버깅 목적으로 플래그를 켤 수있는 방법을 원했습니다. 이것은 (예를 들어) 로깅을 켜는 방법이 될 수 있습니다. 질문에 대답하는 유일한 대답은 – KevinDTimm

1

몇 자세한 내용 :

  • 당신은 전체 방법 또는 단지 코드 블록 또는 코드의 단지 라인을 포장 할 수 있습니다.
  • 당신은 당신의 질문을 해결하지 않는 using System.Diagnostics;
+0

입니다. – KevinDTimm

0
다른 모든 해답 이후

(그러나 1)를 추가 할 필요가, 나 해보자 : 당신은 런타임 스위치를 원하는 경우

, 당신이 필요합니다 환경이나 명령 행에서 정보를 얻는 방법. 또한 일단 정보를 얻으면 프로그램에 적용해야합니다.

1)이 경우 전역 변수가 필요합니다.

bool bDebug; 

2) 정보를

bDebug = strcmp (getEnv ("DebuggingMode"), "1"); // you'll need to mess with this a little - do 'man getenv' and 'man strcmp' for an understanding of what I'm doing 
  • 또는 디버깅 얻을 - 디버깅이 꺼져 있거나

    3에 경우

찾기 위해 getopt() 기능을 활용)를 모든 디버깅을 켜고 자하는 코드에 bDebug가 있는지 확인하십시오.

if (bDebug) { 
    // do something 
    } 
관련 문제