반응형

Debug-Mode : 메모리의 의미

 

초기화 하지 않은 변수는 쓰레기 값으로 채워진다” C/C++책을 한번이라도 주의 깊게 보신 분이라면 한번쯤 접해 보셨을 문구라고 생각됩니다.

 

하지만 (디버그 빌드에 한하여)이 쓰레기 값이 어떤 의미 있는 값이라는 것은 알고 계신가요?

이 의미 있는 값에 대해 일부 정리 해 보려 합니다.

 

Memory

설명

0xCDCDCDCD

할당된 Heap메모리에 채워지는 값(초기화하지 않을 경우)

0xFDFDFDFD

할당된 Heap의 경계(,)에 채워지는 값

0xDDDDDDDD

0xFEEEFEEE

Free Heap메모리에 채워지는 값

0xCCCCCCCC

스택에 할당된 메모리에 채워지는 값(초기화하지 않을 경우)

해당 값은 어셈블리 __asm int 3(break)와 동일하여 이 영역을 접근하면 break point에 적중된다.

 

그렇다면 우리는 해당 메모리 값을 통해 어떤 도움을 받을 수 있을까요?

 

디버거가 자체 적으로 위 메모리의 값을 기준으로 오류 판단을 하기도 할 뿐아니라,

디버깅 상황에서 몇가지 도움을 얻을 수는 있을 듯 합니다.

 

예를 들어 메모리를 엑세스 할 때 에러가 발생할 때,

해당 메모리가

n  0xCDCDCDCD로 채워져 있다면, 해당 메모리를 초기화 하지 않고 사용했을 가능성을 용의 선상에 올려 놓을수 있을 테고,

n  0xFEEEFEEE로 채워져 있다면 이미 해제된 메모리를 참조하고 있음을,

n  할당한 메모리의 전/후 경계 부분이 0xFDFDFDFD값이 아니라면 메모리의 범위를 넘어선 write동작을 했음을 유추 할 수 있을 듯 합니다.

 

문제에 대한 완전한 해결책은 될수 없더라도, 적어도 발생한 문제에 대한 한가지 체크 지점을 발견 할 수도 있다는 얘기가 되겠죠.

 

 

ü  메모리 디버깅 관련 참고URL
http://cafe.naver.com/ddugi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=22
&

 

 

반응형

+ Recent posts