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)했던 녀석들이 활성화된다. 뭐.. 그런거지.
디버그 모드에서는 메모리 주소에도 특정한 값들이 정의되어있다. 그건 다음포스팅에..
댓글