본문 바로가기
컴퓨터 관련/Linux || Unix

[GDB] gdb breakpoint 정리

by _BlankSpace 2017. 4. 27.

혹시, gdb에 대해서 아시나요?


프로그래밍을 할 때, 디버깅을 하기 위해서 툴 하나씩은 다루실 것입니다. 물론, 아직 다루시지 않는 분들도 계실 것입니다.


혹시 아직도 printf로 어디가 문제 있는 지 찾는 분 계시나요? 물론, 저도 처음에는 그랬습니다.


이 방법은 굉장히 시간이 오래 걸리는 방법입니다.


특히, 임베디드 시스템은 훨씬 오래 걸리게 됩니다. 왜냐하면 컴파일을 하는 시간이 굉장히 길기 때문에 신중하게 고쳐야 하거든요.


그래서 오늘은 디버깅 툴 중 하나인 강력한 디버깅 툴인 gdb의 기능을 정리하고자 합니다.




보통 gdb를 어려워 하는 이유는 breakpoint를 어떻게 잡아야할 지에 대한 막막함 때문이라고 생각합니다. 


따라서 gdb의 breakpoint를 거는 방법에 대해 정리해보고자 합니다.


1. 간단하게 브레이크포인트를 설정하는 방법.
(GDB) b(break) [함수명] -- 함수명으로 브레이크포인트를 설정합니다.
(GDB) break 10 -- 라인 번호로 브레이크포인트를 설정합니다.
(GDB) break [파일명]:[함수명] -- 파일에 있는 함수명으로 브레이크포인트를 설정합니다. (만약, 파일에 네임스페이스가 있다면 파일명 앞에 네임스페이스명을 적으면 되겠습니다.)
- (GDB) break [파일명]:10  -- 파일의 라인 번호로 브레이크포인트를 설정합니다.

       - (GDB) break +2  -- 현재 행에서 2개 행 이후 브레이크포인트 설정합니다.
       - (GDB) break -2  //현재 행에서 2개 행 이전 브레이크포인트 설정합니다.
       - (GDB) break *0x8049000  -- 메모리주소에 설정합니다.(어셈블리로 디버깅시 이용합니다.)

       - (GDB) break 10 if var == 0  -- var 변수의 값이 0일때 10번 행에 설정합니다.

2. 조건을 기준으로 브레이크포인트를 발동시키고 싶을 때,

- (GDB) condition [N] var == 0   -- var변수가 0일때 N번 브레이크포인트 동작합니다.

- (GDB) condition [N] func(i) > 5

3. 현재 설정된 브레이크포인트의 목록을 확인하고자 할 때.

      - (GDB) info break 

4. 설정한 브레이크포인트가 필요 없어서 지우고자 할 때. (gdb의 브레이크포인트는 종료될 때까지 유효하므로, 제거해야 합니다.)

      - (GDB) cl(clear) [함수명] -- 해당 함수명의 브레이크포인트를 제거합니다.
      - (GDB) clear 10  -- 해당 라인의 브레이크포인트를 제거합니다.
      - (GDB) clear [파일명]:[함수명] -- 파일명:함수명에 설정한 브레이크포인트를 제거합니다.
      - (GDB) clear [파일명]:10 -- 파일명:라인번호에 설정한 브레이크포인트를 제거합니다.
      - (GDB) d   -- 모든 브레이크포인트 지웁니다.
      - (GDB) disable br  -- 모든 브레이크포인트 비활성화합니다.
      - (GDB) disable br 1 3  -- 1번, 3번 브레이크포인트 비활성화합니다.
      - (GDB) ensable br  -- 모든 브레이크포인트 활성화합니다.
      - (GDB) ensable br 1 3  -- 1번, 3번 브레이크포인트 활성화합니다.


댓글