[Linux] GDB (GNU Debugger) 사용하기 - 4
- 변수에 접근 되는 시점에 브레이크 포인트 걸기
(gdb) watch [변수]
변수 스코프(scope)가 매칭되어야 왓치포인트(Watchpoint)를 설정 할 수 있습니다.
즉, 전역 변수는 아무곳에서나 Watchpoint를 설정할 수 있지만, 지역 변수는 해당 변수의 scope에서만 Watchpoint를 설정 할 수 있습니다.
// watch.c
#include <stdio.h>
int main(void)
{
int i;
printf("Start\n");
for(i=0; i<10; i++) {
printf("i = %d\n", i);
}
printf("End\n");
return 0;
}
gdb로 실행 파일을 오픈합니다.
바로 Watch 포인트를 걸 수 없으므로,
우선 라인7에 브레이크 포인트를 걸고 run 커맨드로 실행을 해서, main 함수 스코프로 진입하게 합니다.
그 다음에 'watch i'를 입력하여 i 변수에 Watch 포인트를 겁니다.
브레이크 포인트와 마찬가지로 info break 커맨드를 통해 Watch 포인트도 확인 할 수 있습니다.

Continue 커맨드를 입력 할 때마다, 변수 i 의 값이 바뀌는 것을 확인 할 수 있습니다.

- 특정 조건 만족시 Breakpoint 걸기
(gdb) break [라인넘버] if [조건]
예를 들어, 10번째 라인에 i가 5일 때 브레이크 포인트가 걸리게 하고 싶다면,
break 10 if i==5 라고 입력하면 됩니다.

break info 커맨드로 확인 하면 다음과 같이 나옵니다.
