블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2815)
Unity3D (869)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (236)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
---------------------------------------------------
*초기작성일 : 2003/06/18
*작성/저작: 곽용재(kwak101@hitel.net)
---------------------------------------------------

(아시는 분도 있을지 모르지만) 프로그램을 디버깅하던 중, 제가 발견했다는 점에서 이곳에 한번 써 봅니다. :) VC++ 통합환경을 사용할 때 가장 많이 쓰게 되는 기능 중, Build->Start(CTRL+F5)와 Debug->Go(F5)의 차이점중 하나에 대해 알아 보겠습니다.

F5는 IDE(통합환경)가 실행 프로세스를 반동결(Soft-ice)상태로 실행시켜, 사용자가 내부 변수의 값을 들여다 볼 수 있거나 중간에 멈출 수 있게 합니다. 디버깅을 할 때에 아주 중요한 역할을 하지요.
 반면, CTRL-F5는 IDE가 실행 프로세스를 단순히 생성(fork)하는 역할만 합니다. 즉, 배포된 프로그램을 우리가 설치해서 실행할 때와 똑같은 환경이라고 생각하면 되겠습니다.

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

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)를 잘 하는가?
   - 전역변수와 정적변수 초기화를 제대로 했는가?
   - 실수로 초기화하지 않고 쓰는 지역변수가 있는가?(요즘 나오는 대부분의 좋은 컴파일러는 경고 메시지를 내주긴 합니다만)

필자의 경우 이것 때문에 반나절을 날리는 고생을 한 적이 있습니다. 참 어이가 없었죠..:)

출처 : http://www.kwak101.pe.kr/bbs/view.php?id=kwak_worksInternDocTip&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=10
반응형
Posted by blueasa
, |

간단하더라.

우선 .sln파일을 열어 version항목에 있는 숫자를 1 내린다.

10.0 -> 9.0

그리고 vproj파일을 열어 같은 작업을 반복한다.

9.0 -> 8.0

 

참고로 2008로 적혀있는 문구는 2005로 바꿔주면된다.

 

나 군대다녀와도 까먹으면 안돼!!


반응형
Posted by blueasa
, |
MS의 매직 디버깅 숫자들의 의미...
ABABABAB HeapAlloc으로 메모리 할당 후 가드 바이트에 채워진 값
CCCCCCCC 초기화 되지 않은 스택 메모리
CDCDCDCD 메모리 할당 후 초기화 되지 않은 힙 메모리
BAADF00D LocalAlloc(LMEM_FIXED)으로 메모리 할당된 후 초기화 되지 않은 값
FDFDFDFD 할당된 메모리의 전후 가드용 바이트에 채워지는 값
FEEEFEEE 힙 메모리를 해제한 후 채워지는 값

http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Tip&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=185
반응형
Posted by blueasa
, |
반응형
Posted by blueasa
, |
반응형
Posted by blueasa
, |

삼성전자의 코딩(Coding), 프로그래밍 스타일

http://a.tk.co.kr/18

 

헝가리안 :: 코딩 스타일, 가독성 향상을 위하여…

http://a.tk.co.kr/28

 

Kyuseo의 C++ 프로그래밍(코딩) 최적화 원칙

http://a.tk.co.kr/126

 

Kyuseo's C++ 독시젠을 활용한 주석 작성 스타일 가이드라인(규칙)

http://a.tk.co.kr/130

 

Kyuseo’s 프로그래밍 규범 (Programming Pattern)

http://a.tk.co.kr/25

 

Kyuseo's C++ 프로그래밍 스타일 가이드라인 :: 코딩/프로그래밍 규칙

http://a.tk.co.kr/279


반응형
Posted by blueasa
, |