Page 15 -
P. 15
그러면 프로그램이 실행되다 디버거가 일시 정지시킵니다. 이 상태에서 Debug 메뉴 아래에 있는
호출 스택(Call Stack) 항목을 봅시다.
1
그림 1-8 디버거의 호출 스택 멀티스레딩
그림 1-8과 같이 현재 실행되고 있는 지점을 확인할 수 있습니다. 호출 스택의 func2()나 main()
을 더블클릭하면 각 함수를 호출하기 직전에 실행되던 지점을 가리킬 것입니다.
호출 스택 안에는 각 함수 안에 선언된 지역 변수(또는 로컬 변수( local variable))도 같이 들어 있습니다.
각 스레드는 실행 지점이 서로 다를 수밖에 없습니다. 스레드를 실행할 때는 그 스레드가 최초로
실행할 함수를 지정하는데, 이때 함수가 서로 다르기 때문입니다. 같은 함수를 실행한다 하더라
도 그 함수에 넘긴 인자나 메모리 상태 등이 다르므로 결국 다른 실행 지점을 가리킬 수밖에 없습
니다. 심지어 같은 함수, 같은 인자, 메모리 상태까지 모두 동일하더라도 실행 지점은 약간 차이가
생기기도 합니다(그 이유는 이 장을 끝까지 읽으면 알 수 있습니다).
따라서 각 스레드는 각자 호출 스택을 가집니다.
그림 1-9 스레드, 호출 스택, 힙의 관계
프로세스
스레드
호출 스택
스레드
힙
호출 스택
스레드
호출 스택
023