2012-10-18 4 views
20

이 코드는 C# 클래스에 있습니다. 코드에서#if 디버그가 실행될 때

#if DEBUG 

경로가 실행 얻을 않을 때 내가 물어보고 싶은게 무엇

#if DEBUG 
     private const string BASE_URL = "http://www.a.com/"; 
#else 
     private const string BASE_URL = "http://www.b.com//"; 
#endif 

은? 나는 Visual Studio에서 디버그 세션을 실행하면

는이

  1. 을 실행 얻을합니까?
  2. 디버그 폴더에서 문제가되는 exe 또는 dll을 수동으로 실행할 때?
  3. 내가 언급하는 것을 잊어 버린 다른 모든 상황?
+2

'#if DEBUG'은 절대로 실행되지 않지만 코드 컴파일에 영향을줍니다. –

답변

31

#if DEBUG 그것은 처리기 정의의 수동으로 설정할 수 있습니다 그러나 VS에서 디버그 구성을 컴파일 할 때

디버그는 기본 설정입니다.

DEBUG 상수를 정의하면 컴파일됩니다. 그리고 네, 그것은 Debug Build Configuration의 기본값입니다.

비주얼 스튜디오 2010 프로젝트 속성 : Define DEBUG constant 체크 Visual Studio 2010 Project Properties

경우 VS 컴파일합니다 : 그렇지 않은 경우 (확인되지 ​​않은)

private const string BASE_URL = "http://www.a.com/"; 

VS 컴파일합니다 :

private const string BASE_URL = "http://www.b.com//"; 
+0

우수 답변. 이것은 VS2017의 경우입니다. – robnick

12

사전 처리기 지침입니다. DEBUG 부분의 코드는 디버그 빌드를 수행 할 때 컴파일됩니다 (특히 DEBUG 상수가 정의 된 경우). 나는. 디버그 빌드를 수행하는 경우 BASE_URL은 www.a.com을 가리 킵니다. 그렇지 않으면 www.b.com을 가리 킵니다.

7

DEBUG 지시문을 사용하여 컴파일 할 때. 따라서 설정되어있는 경우 첫 번째 줄만 컴파일 된 이진 파일의 일부가되고 두 ​​번째 줄이 설정되지 않은 경우 이진 파일의 일부가됩니다. 당신은 당신이 어떤 구성

2

하는 경우 당신은 DEBUG 설정, else lin 앞에있는 코드로 컴파일하고있다. e는 컴파일되지 않고 다른 컴파일러는 컴파일되지 않습니다. 다른 구성으로 컴파일하면 두 번째 줄은 컴파일되지만 첫 번째 줄은 컴파일되지 않습니다.

+0

VS에서 프로젝트의 기본 설정이 참이지만 VS를 사용하지 않거나 설정을 변경하면 _any_ 구성에 DEBUG 기호가 포함될 수 있습니다 (원하는 경우 릴리스 포함) –

+0

@RuneFS 좋은 점, 감사합니다. –

3

"컴파일러 지시문"입니다. 실제로 컴파일 과정에서 코드를 포함 시키거나 제외시킵니다 (컴파일 할 때 #include에 넣음). 즉, DEBUG 심볼은 프로젝트의 속성 및 Visual Studio의 속성은 일반적으로 "릴리스"빌드에서 자동으로 제거됩니다.

기본적으로 Visual Studio에서 디버그를 실행할 필요가 없으며 특정 폴더에있을 필요가 없으며 코드가 방금 빌드됩니다.

1

VS2017은 실제로 활성 구성을 감지하고 예를 들어 이 회색으로 표시됩니다. 릴리스 구성이 선택되면 디버그 조건은입니다.

enter image description here

0

로 이동 "프로젝트 속성"-> 응용 프로그램의 탭을 구축 할 수 있습니다. 구성 : 활성 (디버그), 디버그 구성이 활성화 된 경우 아래 코드가 콘솔에 인쇄됩니다.

#if DEBUG 
    Console.WriteLine("in debug mode..."); 
#endif 

구성 : 활성 (릴리스)이면 릴리스 구성이 활성화됩니다. 아래 코드는 콘솔에 인쇄됩니다. 당신은 "디버그/릴리즈/구성 관리자"를 사용하여 디버그 및 릴리스 모드 사이를 전환하려면

#if RELEASE 
    Console.WriteLine("in release mode..."); 
#endif 

개발자의 대부분이 알고있는 바로 도구 Menu.Apologies에서 드롭 다운 ...하지만 간과 때때로 위 코드가 올바르게 실행되지 않는 이유를 혼란스럽게합니다.

관련 문제