본문 바로가기
Programming/Tips(C++,C#)

VC++ Release모드로 디버깅하기

by 곰네Zip 2022. 7. 25.

Visual Studio에서 VC++로 실행하면, Release와 Debug가 있다.

둘의 차이는?

1. PDB파일의 생성여부

2. 최적화 여부

3. _DEBUG 전처리기 정의여부

실행중인 프로세스에 연결하면.. 디버그 모드로 연결은 된다.

근데 중단점 설정이나 소스코드 위치는? 많이 다르다.

 

중단점 설정에 필요한거 : PDB파일

프로젝트 -> '속성' 에 들어가보자.

구성속성 중, '링커' -> '디버깅' 선택해보면..

프로젝트 구성 속성 창

 위와 같이 디버그 정보 생성이 되어있어야 PDB파일이 생성된다. (VS2022에서는 Release도 생성하게 해주는 것이 default로 된듯? VS2018인가까지는 생성안함이 Default였는데..)

 여튼.. 저 옵션이 되어있으면 PDB파일이 생성되고, 해당 프로세스에 붙여서 디버깅이 가능하다.

 근데.. PDB파일 생성시 버전 = 소스버전이어야한다. 아니면 중단점이 활성화 되지 않음.

 사실 버전이 다르면 정확하게 중단점이 걸리지 않기에 버전을 일치시키는 것이 제일 좋다. 

 피치못할 사유로.. 버전이 다른 환경에서 디버깅해야한다면 소스버전이 달라도 디버깅 할 수 있게해주는 옵션으로 설정하면 되긴 한다.

VS의 상단메뉴 중 '도구' -> '옵션' 진입

 '도구' -> '옵션'에 들어가서 옵션창이 뜨면, 좌측 트리를 아래로 스크롤하여.. 

 '디버깅' -> '일반'에 들어간다. 거기에 있는 옵션들 중.. '원본 버전과 일치하는..' (Text는 2022와 이전버전과 조금 다르다. 하지만 원본버전과 일치해야한다고 써있는건 동일하다.) << 이 옵션을 체크 해제하면 된다.

 

 그리고 Release는 기본적으로 속도최적화가 On이고, Debug는 최적화가 없다. 중단점이 line by line으로 이동하지 않고, 훅훅 뛰어넘는다 -> Release의 속도 최적화로 인해 발생하는거.

 이 옵션은 프로젝트 구성속성->'C/C++'->최적화로 들어가면 변경할 수 있다.

 

 Release를 여기까지 구성하면.. 뭐 Debug 모드랑 거의 다른게 없다.

 차이점이라면 _DEBUG매크로가 들어가있냐 아니냐의 차이.

 _DEBUG매크로를 선언해주면.. 디버그용으로 분기컴파일 (#ifdef _DEBUG)했던 녀석들이 활성화된다. 뭐.. 그런거지.

디버그 모드에서는 메모리 주소에도 특정한 값들이 정의되어있다. 그건 다음포스팅에..

반응형

댓글