본문으로 바로가기

디버깅 보는법!!

category 프로그래밍/C언어 2018. 6. 8. 00:14

디버깅을 하실때 메모리를 보시나요?
특히 c언어를 하시는 분들이라면 디버깅할때 메모리를 보는것이 상당히 중요합니다.
대부분 디버깅하는법은 여러 블로그에 정보가 많으니
메모리 보는법을 설명하겠습니다.

보시는 그림은 소스코드와 메모리 창입니다.
먼저 int a = 300; 부분에 break point(F9)를 설정했습니다.
그리고 디버깅 모드(F5)를 시작합니다.
그렇게 되면 주소창에 &a를 입력하면 주소가 나오는데 여기서 a의 주소가 0x0077F87C로 나오네요.
주소는 컴퓨터 마다 다르니 크게 신경 쓸 필요 없습니다.
int형은 4byte입니다. 0x0077F87C 옆에 보면 cc cc cc cc ???? 
라고 나와있는데요 cc부분에서 c하나는 4bit를 나타내고 cc 부분은 정수를 나타냅니다.
?부분은 문자를 나타냅니다.
cc는 쓰레기 값이라고 부르는데요. 아직 a를 초기화 하지 않았기 때문에 
cc(쓰레기 값)들이 들어가게 됩니다.
그런 다음 F10을 누르게 되면 다음줄로 넘어가게 됩니다.

넘어오게 되면 빨간색으로 데이터가 바뀝니다.
a의 변수에 300이 들어가야 하는데 2c 01 00 00 이 나옵니다.
즉 32bit에서 300이 되려면 0x0000012c 가 되어야 합니다.
그런데 왜 메모리창에서는 반대로 뒤집혀 있을까요?

그 이유는 데이터를 메모리에 적재하는 방법을 byte order라고 부릅니다.
그런데 byte order는 cpu에 따라 2가지로 나뉩니다. cpu에 따라 다른 방식을 사용한다는 것이죠.
1. Little endian 방식
=> 반대로 적재하는 방식
-> 2c 01 00 00

2. Big endian 방식
=> 순차적으로 적재하는 방식
-> 00 00 01 2c

Little endian 과 Big endian은 서로 대각선 방향에 데이터가 존재합니다.

사실 읽을때는 크게 문제가 없는데
네트워크 프로그래밍을 할때는 byte order 를 신경 써주어야 합니다.