Debug-Mode : 메모리의 의미
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&