디버그 모드와 릴리스 모드의 차이
Visual Studio에서 디버그(Debug) 모드와 릴리스(Release) 모드는 .NET 프로젝트를 빌드할 때 사용되는 서로 다른 구성입니다.
코드를 한 줄씩 실행하며 디버깅하려면 디버그 모드를 선택하고, 최종 어셈블리 파일(.dll 또는 .exe)을 빌드할 때는 릴리스 모드를 선택하는 것이 좋습니다.
디버그 모드에서는 소스 코드와 생성된 명령어 사이의 관계가 복잡해지기 때문에 바이너리 최적화가 수행되지 않습니다.
덕분에 중단점(breakpoint)을 정확한 위치에 설정할 수 있고, 개발자가 코드를 한 줄씩 단계별로 실행해 가며 확인할 수 있습니다.
프로그램의 디버그 구성은 전체 기호 디버그 정보(symbolic debug information)와 함께 컴파일되므로, 디버거가 현재 실행 위치가 소스 코드의 어느 부분인지 파악하는 데 도움이 됩니다.
반면 릴리스 구성에는 기호 디버그 정보가 포함되지 않으며, 코드가 완전히 최적화됩니다.
빌드 구성 변경 방법
[빌드(Build)] 메뉴에서 [구성 관리자(Configuration Manager)]를 선택한 후, Debug 또는 Release를 선택합니다.
또는
도구 모음의 솔루션 구성(Solution Configurations) 목록에서 Debug 또는 Release를 선택하는 방법도 있습니다.
#if DEBUG 지시문의 동작 원리
#if DEBUG 블록 안에 작성된 코드는 프로그램이 디버그 모드로 실행될 때만 동작합니다.
프로그램이 릴리스 모드로 실행되면 #if DEBUG 조건은 false가 되어, 해당 블록 내부의 코드는 실행되지 않습니다.
예제
class Program {
static void Main() {
#if DEBUG
Console.WriteLine("You are in debug");
#endif
Console.ReadKey();
}
}위 예제에서 프로그램이 디버그 모드로 실행되면 if 블록은 true를 반환하여 "You are in debug"라는 문장이 출력됩니다.
반대로 프로그램이 디버그 모드가 아니라면 #if DEBUG는 false를 반환하고, 해당 문장은 출력되지 않습니다.