GDB
GDB
GDB GDB란 GNU Debugger의 약자이며 다음과 같은 특징이 있다. C/C++ 디버거 프로그램 시작, 멈춤 및 수행 도중 조작 가능 변수 값 변경 및 추적 함수 스택 관리 코드 분석 프로그램 수행 과정 추적 프로
ypangtrouble.tistory.com
명령어
l (list)
- 현재 실행중인 라인을 포함하여 소스 코드 10줄 출력
- 현재 실행중인 라인을 기준으로 중앙에 표시
- l (list) - : 이전 10줄의 코드 출력
- l (list) [line number]
- line number에 해당하는 소스 코드의 줄을 기준으로 10줄 출력
- l (list) [function name]
- 해당 함수를 찾아 함수의 시작 지점을 기준으로 10줄 출력
- set listsize [number]
- 출력되는 소스 코드의 행 수를 number로 변경
r (run)
- gdb는 바이너리 파일을 로드하지만 실행시키지는 않음.
- 프로그램을 실행하는 명령어
- r ([arg1][arg2] …)
b (break)
- 프로그램의 실행 중단 지점 설정
- 현재 실행 중인 라인에 중단 지점 설정
- 줄 번호, 함수 등 중단 지점을 자유롭게 설정 가능
- gdb에서 프로그램 실행 중 중단 지점을 만나면 프로그램 실행을 중지
- b (break) [line number]
- 현재 소스의 특정 라인에 중단지점 설정
- b (break) [function name]
- 현재 소스이 특정 함수에 중단지점 설정
- b (break) [line or func] if [condition]
- 조건부 중단지점 설정
- 특정 라인 혹은 함수에서 condition을 만족하면 프로그램 실행 중지
- clear / delete 명령어로 중단지점 삭제 가능
info b (break)
- breakpoint 의 목록 확인
d [num]
- 해당 num의 breakpoint 를 삭제하는 명령어
c (continue)
- 중단된 현재 프로그램의 실행을 계속 진행
- 프로그램 실행 도중 중단 지점에 도달하면 프로그램 실행 중지
- 프로그램 실행 도중 종료되면 프로그램 종료
- 중단지점 설정 후 중단지점에 도달하기 위해 주로 사용
n (next)
- 프로그램의 다음 행을 실행하는 명령어
- 단 하나의 행을 실행한 후 프로그램 실행을 중지
- 버그가 있는 부분을 찾아낼 때 유용하게 사용
- next 를 통해 프로그램을 줄 단위로 실행
- 현재 정지되어 있는 줄을 실행한 후 다음 줄 실행 이전에 정지
- 함수 내부로 진입하지 않고 함수를 실행
- 함수 내부에 버그가 있는 경우 확인 불가능
- 함수 내부에 무한 루프가 실행되는 경우 gdb로 돌아오지 않음
- s (step) 명령어를 통해 해결 가능
- n (next) [line number]
- [line number] 만큼의 줄을 한 번에 실행
p (print)[expression]
- expression의 결과를 출력
- expression은 다음과 같을 수 있음
- 단일 변수
-> 단일 변수의 값 출력 - 변수를 포함한 수식
-> 해당 수식의 계산 결과 출력 - 함수
-> 호출된 함수가 반환하는 값 출력
- 단일 변수
- #define으로 선언된 매크로는 확인 불가능
where
- 현재 실행중인 프로그램에서 함수의 호출상태를 볼 수 있음
- main 함수부터 시작해서 호출된 함수를 보여주며, 이 목록을 call stack 이라 함
up [num]
- call stack 에서 상위 함수의 위치로 이동
- num에 써진 숫자만큼 상위로 이동하고, num이 없으면 1만큼 이동
- 상위 함수로 이동하면 프로그램 내 현재 위치가 상위 함수에 있는 것처럼 변수 등을 출력할 수 있음
down [num]
- call stack 에서 하위 함수의 위치로 이동
- up과 반대로 이동을 하고 그 외 특성은 같음
frame [num]
- stack frame의 정보를 출력하는 명령어
- where 명령어로 출력된 call stack 의 맨 앞에 있는 숫자를 num으로 주면, 그에 맞는 frame의 정보를 출력
- num을 주지 않으면 현재 선택되어 있는 frame의 정보를 출력
- 처음 frame 명령어 실행 시 0번
- 함수 이름, 아규먼트, 파일명, 행 번호 등을 출력
select-frame [num]
- frame을 선택하는 명령어
- 단독으로 쓰이지 않고, frame 관련 명령어에서 frame 번호를 지정해줄 때 사용
info frame [num]
- 현재 선택되어 있는 frame의 자세한 정보를 보여줌
- 함수 이름, 아규먼트, 파일명, 행 번호 외에 레지스터의 값들을 보여줌
- num을 주지 않으면 select-frame으로 선택된 frame의 정보를 보여줌
반응형
'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글
Make / Makefile (41) | 2022.03.30 |
---|---|
gcc 컴파일러 (13) | 2022.03.29 |
프로파일링 (13) | 2022.03.28 |
GDB (6) | 2022.03.26 |
병렬성 (0) | 2015.07.20 |
댓글