※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로
C++에 대한 구체적인 정보를 담고 있지 않습니다.
ㆍ 스택 영역은 용량이 한정되어있고, 이게 초과되면 스택 오버플로우 발생.
※ 디버깅을 해보자
ㆍ 위 사진같은 코드가 있는데 중단점을 저쯤 찍어두고 디버깅을 돌려보자.
ㆍ 어셈블리에선 우리가 찾고싶은 함수에 대한 정보는 없다??
-> 레지스터 창을 열어주자
ㆍ ESP라고 되어있는게 스택포인터다. ※ 복습 eax ebx... 등등E인건 32비트로 디버깅을 돌리기 때문 (64비트였으면 R)
ㆍ 해당 주소를 복사해서 메모리 창을 열어주자
ㆍ 메모리에 스택 포인터 주소를 복사해줘서 찍어봤더니 뭔가가 나온다!
ㆍ 눈으로 보기 편하게 4바이트 정수로 바꿔주고
ㆍ F11버튼을 통해 하나씩 실행 해보면 3 5 전달 등 함수포인터의 역할이 잘 되고있다.
ㆍ 낮은 주소로 값이 들어간걸 확인할 수 있다.
※ 이런식으로 디버깅을 돌리는 방법만 확인해두고 추후에 더 공부해보도록 하자
ㆍ 위 과정이 그림과 같은 과정을 디버깅을 통해 확인하는 과정이다.
ㆍ 즉 함수가 동작하는 방식을 그림으로 쉽게 표현해준 그림이다.
->알아야 하는 이유는 프로그램이 크래쉬나고 터졌을때 디버그를 돌려서 어디서 왜 오류가 났는지 판단할 수 있다.
▶ 호출스택
ㆍ 디버그를 돌려서 함수의 호출스택을 확인할 수 있다.
※ 개인적으로 cocos2d-x 공부할 때 많이 제일 많이 해봤던거네 단축키 F10 F11 등등
★ 버그가 났을때 혹은 분석할때 디버그는 매우 중요하다
'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글
포인터 연산 (0) | 2024.09.17 |
---|---|
포인터 (0) | 2024.09.17 |
const와 메모리 구조 (3) | 2024.09.16 |
비트연산과 비트플래그 (1) | 2024.09.16 |
비교연산과 논리연산 (디스어셈블리 디버그) (0) | 2024.09.15 |