[Linux] GDB (GNU Debugger) 사용하기 - 7
스코프 변경하기 다음 코드에서는 Depth 가 2인 함수 호출을 하게 됩니다. main( ) → func1( ) → func2( ) // frame.c # include <stdio.h> void func2 () { int b = 30 ; printf ( "func2\n" ); } void func1 () { int a = 20 ; printf ( "func1\n" ); func2(); } int main () { int n = 100 ; printf ( "Start\n" ); printf ( "[main] n = %d\n" , n); func1(); printf ( "End\n" ); return 0 ; } 각 스코프에서는 접근 가능한 지역 변수를 확인 할 수 있습니다. Break Point를 라인넘버 7에 걸고 run 커맨드로 실행 후, backtrace 커맨드로 스택 프레임을 확인 해보겠습니다. 그러면 왼쪽에 스택 프레임 넘버가 나오게 됩니다. 지금 위치한 프레임은 함수 func2( ) 스코프 이므로, 변수 b 만 확인 할 수 있습니다. 하지만, frame 커맨드 (약자 'f') 를 사용하면 스택프레임번호에 맞는 스코프에 포커싱 하여 상위 호출단의 지역변수에 접근이 가능합니다. (gdb) frame [스택프레임번호] frame 1을 입력하여 스코프를 함수 func1( ) 으로 포커싱 시킬 수 있습니다. 그러면 변수 a에 접근이 가능해 집니다. 포커싱이 func1( )에 되어있기 때문에, b 변수에는 접근 할 수 없게 됩니다. frame 2를 입력하게 되면 main( ) 함수로 포커싱 됩니다. 그러면 변수 n에는 접근 가능하나 func1 과 f...