컴파일 모드 (릴리즈모드, 디버그모드)

2021. 10. 17. 23:51C&C++

컴파일 모드에는 릴리즈 모드디버그 모드가 있는데,

각각 다른 런타임 라이브러리를 갖기 때문에 컴파일시 어셈블리 구조가 다르다.

 

릴리즈 모드의 경우 배포용이기 때문에 최대한 최적화를 시키고,

디버그 모드는 개발용이기 때문에 컴파일시 안전장치가 많이 들어가게 된다.

(지역변수를 함수 스택 프레임에 할당할 때 앞뒤로 4바이트씩 공간을 남겨놓는 등)

 

그래서 디버그 모드에서 개발을 하고 막상 릴리즈 모드로 컴파일을 시도했을때

버그를 잡기가 너무 어려운 경우가 생긴다.

 

그러므로 릴리즈 모드로 개발을 하고, 디버그 모드에서 테스트를 하는 것이 좋다.

디버그 모드에서는 오류를 잡기가 어렵지 않다.

 

소스코드 디버깅 시 소스코드와 기계어&어셈블리가 연결이 될 수 있는 이유는,

컴파일 시에 실행파일과 프로그램DB(.pdb, 기계어 - 소스코드 매핑 역할)를 생성하기 때문.

 

그런데 릴리즈 모드에서는 소스코드가 그 자체로 변환되는 것이 아니라

최적화 컴파일을 하기 때문에, 이 최적화 컴파일 옵션이 켜있으면 제대로 디버깅하지 못한다.

(최적화되어 어셈블리상 코드라인이 단축되거나 생략되기 때문에 소스코드와 1대1 대응되지 못함)

 

그러므로 개발 시 릴리즈 모드를 사용할 때 최적화 컴파일을 끄고 사용하는 것이 바람직하다.

 

'C&C++' 카테고리의 다른 글

랜덤을 구현하는 방법  (0) 2021.11.07
#pragma once  (0) 2021.10.25
enum class  (0) 2021.10.25
프로그래밍 팁  (0) 2021.10.19
C언어 volatile  (0) 2021.10.19