프로그램은 많은 서브루틴 혹은 함수로 구성되어 있습니다. 프로그램이 실행될 때 C 언어에서는 void main() 함수가 실행되고, C#에서는 메인 클래스의 Main() 함수가 실행됩니다. 메인 함수를 시작점으로 많은 함수가 실행됩니다. 그리고 그 함수들은 또 다른 함수들을 실행합니다.
함수는 실행이 끝나면 자기 자신을 호출했던 호출자(caller) 함수를 실행했던 지점으로 되돌아가야 합니다. 그렇게 하려면 어디까지 실행하다 말았는지를 기억하고 있어야 합니다. 이 정보가 저장되어 있는 곳을 호출 스택(call stack)이라고 합니다. 여러분이 Visual Studio를 쓰고 있다면 디버거를 사용해서 호출 스택을 확인해 볼 수 있습니다.
그림 1-7과 같이 간단한 프로그램을 하나 만든 후 func3()에 디버그 중단점(debug break point)을 찍고 디버깅을 실행해 봅시다.
▲ 그림 1-7 Visual Studio에서 디버깅 중