E D R , A S I H C RSS

Release Debug Build Start Go�관계

VC++ 통합환경� 사용할 때 가장 많� 쓰게 �는 기능 중, Build->Start(CTRL+F5)와 Debug->Go(F5)� 차��중 하나� 대해 알아 보겠습니다.

F5는 IDE(통합환경)ê°€ 실행 프로세스를 ë°˜ë�™ê²°(Soft-ice)ìƒ�태로 실행시켜, 사용ìž�ê°€ ë‚´ë¶€ 변수ì�˜ ê°’ì�„ 들여다 ë³¼ 수 있거나 중간ì—� ë©ˆìœ ìˆ˜ 있게 합니다. 디버깅ì�„ í•  때ì—� 아주 중요한 ì—­í• ì�„ 하지요.
반면, CTRL-F5는 IDE가 실행 프로세스를 단순히 �성(fork)하는 역할만 합니다. 즉, 배�� 프로그램� 우리가 설치해서 실행할 때와 똑같� 환경��고 ��하면 �겠습니다.

� � 개� 기능� 방금 설명한 것 �외� 조금 다른 실행환경� 제공합니다. 바로 "미초기화 변수� 초기화"입니다. 그리고, � 양�� 프로그램� 릴리즈 빌드�, 디버그 빌드�� 따� 다릅니다. 아래와 같� 구조체와 �것� 사용한 코드(비� 한 줄�지만)있다고 가정합시다.

~cpp 
struct Sample
{
   Sample(bool b_isValid):b_isValid_(b_isValid){}
   Sample(){}
   
   inline bool isValid(){return b_isValid_;}

   bool  b_isValid_;
};

.
.
.


Sample smpl1; 
bool b = smpl1.isValid();

� 코드를 릴리즈 빌드로 만들고, Start(CTRL+F5)로 실행할 때� b값과 Go(F5)로 실행할 때� b값� 체�하면 서로 다르게 나옵니다. Start� 경우 b� 값� false가 나오고, Go� 경우 b� 값� true로 나옵니다. 바꾸어 �하면 Start는 미초기화 변수를 0으로 놓고, Go는 0� 아닌 값으로 세팅한다는 것입니다. (실제로 bool 타입� false 값� VC6� 디버거로 �으면 0입니다. VC7� 경우엔 false�고 나오지만요)

한�, 디버그 빌드� 경우는 어떨까요? 그 경우�는 Start나 Go나 차�를 보�지 않고 b값� true입니다. 여기서 �그마한 결론� 얻� 수 있습니다.

  1. 디버그 빌드를 했거나 F5로 실행시키는 경우, 미초기화 변수는 0� 아닌 값으로 초기화�다.
  2. 릴리즈 빌드한 프로그램� CTRL-F5로 실행시키는 경우, 미초기화 변수는 0으로 초기화�다.

디버깅할 때는 잘 �� 프로그램� 그냥 실행시킬 � 오�작� 보�는 경우가 있어 막대한 육체�/정신� �너지를 낭비하는 경우가 있는�, 그런 경우를 만난다면 � 글� 내용� 한 번쯤 떠올려 보시기 바�니다. 그리고 다�� �검� 해보시기 바�니다.

-기본�성�가 함부로 내�댕��져 있는가?
-복사�성��서 멤버 간 대입(member-wise assignment)를 잘 하는가?
- 전역변수와 정�변수 초기화를 제대로 했는가?
- 실수로 초기화하지 않고 쓰는 지역변수가 있는가?(요즘 나오는 대부분� 좋� 컴파�러는 경고 메시지를 내주긴 합니다만)

ExtractedFrom) http://www.kwak101.pe.kr/
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:53
Processing time 0.0049 sec