방법: 추적 및 디버그를 사용한 조건부 컴파일
업데이트: 2007년 11월
개발 단계에서 응용 프로그램을 디버깅하는 동안 추적 및 디버깅 출력은 모두 Visual Studio의 출력 창에 표시됩니다. 그러나 배포되는 응용 프로그램에 추적 기능을 포함하려면 TRACE 컴파일러 지시문을 사용하여 계측된 응용 프로그램을 컴파일해야 합니다. 그러면 추적 코드가 응용 프로그램의 릴리스 버전으로 컴파일됩니다. TRACE 지시문을 사용하지 않으면 컴파일 과정에서 모든 추적 코드가 무시되고 배포할 실행 코드에 포함되지 않습니다.
추적 및 디버깅 메서드에는 관련된 조건부 특성이 있습니다. 예를 들어, 추적의 조건부 특성이 true이면 모든 추적 문이 어셈블리(컴파일된 .exe 파일 또는 .dll) 내에 포함되고, Trace 조건부 특성이 false이면 추적 문이 포함되지 않습니다.
응용 프로그램을 빌드할 때 Trace 또는 Debug 조건부 특성을 설정할 수 있습니다. 또는 이 두 가지를 모두 설정하거나 설정하지 않을 수도 있습니다. 따라서 Debug만 설정하는 경우, Trace만 설정하는 경우, 두 가지를 모두 설정하는 경우, 두 가지 모두 설정하지 않는 경우의 네 가지 빌드 방법이 있습니다. 프로덕션 배포를 위한 일부 릴리스 빌드에는 둘 다 포함되지 않은 경우도 있지만 디버깅 빌드에는 둘 다 포함되어 있는 경우가 대부분입니다.
다음과 같은 여러 가지 방법으로 응용 프로그램에 컴파일러 설정을 지정할 수 있습니다.
속성 페이지
명령줄
#CONST(Visual Basic의 경우) 및 #define(C#의 경우)
속성 페이지 대화 상자에서 컴파일 설정을 변경하려면
솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭합니다.
바로 가기 메뉴에서 속성을 선택합니다.
Visual Basic의 경우 속성 페이지의 왼쪽 창에서 컴파일 탭을 클릭하고 고급 컴파일 옵션 단추를 클릭하여 고급 컴파일러 설정 대화 상자를 표시합니다. 사용할 컴파일러 설정의 확인란을 선택합니다. 사용하지 않을 설정의 확인란은 선택을 취소합니다.
C#의 경우 속성 페이지의 왼쪽 창에서 빌드 탭을 클릭하고 사용할 컴파일러 설정의 확인란을 선택합니다. 사용하지 않을 설정의 확인란은 선택을 취소합니다.
명령줄을 사용하여 계측된 코드를 컴파일하려면
명령줄에서 조건부 컴파일러 스위치를 설정합니다. 그러면 실행 파일에 추적 또는 디버그 코드가 포함됩니다.
예를 들어, 명령줄에 다음 컴파일러 명령을 입력하면 추적 코드가 컴파일된 실행 파일에 포함됩니다.
Visual Basic의 경우: vbc /r:System.dll /d:TRACE=TRUE /d:DEBUG=FALSE MyApplication.vb
C#의 경우: csc /r:System.dll /d:TRACE /d:DEBUG=FALSE MyApplication.cs
팁: 여러 응용 프로그램 파일을 컴파일하려면 MyApplication1.vb MyApplication2.vb MyApplication3.vb 또는 MyApplication1.cs MyApplication2.cs MyApplication3.cs와 같이 파일 이름 사이에 공백을 둡니다.
위의 예제에서 사용된 조건부 컴파일 지시문의 의미는 다음과 같습니다.
지시문
의미
vbc
Visual Basic 컴파일러
csc
C# 컴파일러
/r:
외부 어셈블리(EXE 또는 DLL)를 참조합니다.
/d:
조건부 컴파일 기호를 정의합니다.
참고: TRACE 또는 DEBUG를 대문자로 입력해야 합니다. 조건부 컴파일 명령에 대한 자세한 내용을 보려면 명령 프롬프트에 vbc /?(Visual Basic의 경우) 또는 csc /?(C#의 경우)를 입력하십시오. 자세한 내용은 명령줄에서 빌드(C#) 또는 명령줄 컴파일러의 호출(Visual Basic)을 참조하십시오.
#CONST 또는 #define을 사용하여 조건부 컴파일을 수행하려면
소스 코드 파일의 맨 위에 프로그래밍 언어에 적합한 문을 입력합니다.
언어
문
결과
Visual Basic
#CONST TRACE = true
추적 기능을 사용합니다.
#CONST TRACE = false
추적 기능을 사용하지 않습니다.
#CONST DEBUG = true
디버깅 기능을 사용합니다.
#CONST DEBUG = false
디버깅 기능을 사용하지 않습니다.
C#
#define TRACE
추적 기능을 사용합니다.
#undef TRACE
추적 기능을 사용하지 않습니다.
#define DEBUG
디버깅 기능을 사용합니다.
#undef DEBUG
디버깅 기능을 사용하지 않습니다.
추적 또는 디버깅 기능을 사용하지 않으려면
소스 코드에서 해당 컴파일러 지시문을 삭제합니다.
- 또는 -
컴파일러 지시문을 주석으로 처리합니다.
참고: 컴파일할 준비가 되었으면 빌드 메뉴에서 빌드를 선택하거나 명령줄 메서드를 사용할 수 있습니다. 명령줄 메서드를 사용하는 경우에는 조건부 컴파일 기호를 정의하기 위해 d:를 입력하지 마십시오.