Debug와 Release의 차이
포스트
취소

Debug와 Release의 차이

Debug란?

Debug는 시스템의 논리적인 오류나 비정상적인 연산을 찾아 원인을 밝히고 수정할 수 있다.
우리가 흔히 컴파일을 진행할 때 방식을 변경할 수 있는데 기본적으로 설정되어 있는게 Debug다.

Release란?

Release는 스스로 코드를 최적화 후 컴파일을 진행한다.
개발단계가 아닌 배포할 시기에 적용하는 것이 좋다.

Debug와 Release 비교

 DebugRelease
코드를 최적화XO
코드 실행 속도느림빠름
컴파일 속도빠름느림
파일 크기많음적음
메모리 사용량많음적음

💻 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// * 이번 코드 핵심
// 컴파일 모드를 Debug -> Release 모드로 변경 시 어떤 상황이 벌어지는가?
// Release 모드로 변경 시 최적화가 되기 때문에 우리가 의도하지 않았던 잘못된 상황이 발생 할 수 있다.
static bool _stop = false;

static void ThreadMain()
{
    Console.WriteLine("쓰레드 시작!");

    while (_stop == false)
    {
        // 누군가 Stop 신호를 해주길 기다린다
    }

    /*
    Release 모드의 경우 위의 while 코드를 아래와 같은 코드로 최적화하게 된다.
    if (_stop == false)
    {
        while (true)
        {

        }
    }
    */

    Console.WriteLine("쓰레드 종료!");
}

static void Main(string[] args)
{
    Task t = new Task(ThreadMain);
    t.Start();

    Thread.Sleep(1000);

    _stop = true;

    Console.WriteLine("Stop 호출");
    Console.WriteLine("종료 대기중!");

    t.Wait();

    Console.WriteLine("종료 성공!");
}

결과

Debug : 코드 정상 작동
Release : 코드 최적화로 인한 무한루프

이로써 최적화의 장점은 있지만 우리가 의도하지 않는 방향으로 코드가 변형될 수 있어 Release를 사용하는 경우 코드를 더 분석하고 수정할 필요가 있다.


💡 참고

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

(C#) 스레드

(C#) Memory Barrier