[Linux] gdb 사용해 디버깅하기

알린·2023년 11월 29일
0

Linux

목록 보기
14/14

디버깅

gdb

  • GNU에서 만든 디버거
명령어정의
-g실행 파일에 디버깅 정보 삽입
gcc -g -o 실행파일 실행파일.c
gdb 실행파일
  • main.c 파일의 코드를 다음과 같이 작성한 후 디버깅

=> gdb 실행 결과

(gdb) l => main 함수를 기점으로 소스 출력
(gdb) l 10 => 10행을 기준으로 소스 출력
(gdb) l func => func 함수의 소스 출력

(gdb) q => 종료

브레이크 포인트

(gdb) b main => main 함수의 시작 부분에 브레이크 포인트
(gdb) b func => func 함수의 시작 부분에 브레이크 포인트
(gdb) b 10 if var == 0 => 10행에 브레이크 포인트를 설정하는데, var 변수 값이 0일 때 작동 

(gdb) info breakpoints => 브레이크 포인트 설정 상태

(gdb) cl func => func 함수 시작 부분에 브레이크 포인트 지움
(gdb) d => 모든 브레이크 포인트 지움

프로그램 수행

(gdb) r => 프로그램 수행 
(gdb) r arg1 arg2 => arg1과 arg2 인자로 프로그램 수행
(gdb) k => 프로그램 수행 종료

(gdb) s => 현재 행 수행 후 정지, 함수 호출 시 함수 내부로 들어감
(gdb) n => 현재 행 수행 후 정지, 함수 호출 시 함수 수행 후 다음 행으로 감
(gdb) c => 브레이크 포인트를 만날 때까지 멈추지 않고 계속 수행

(gdb) u => 현재 루프를 빠져나감
(gdb) finish => 현재 함수를 수행하고 빠져나감
(gdb) return => 현재 함수를 수행하지 않고 빠져 나감
(gdb) si => 현재의 인스트럭션을 수행, 함수 호출 시 함수 내부로 들어감
(gdb) ni => 현재의 인스트럭션을 수행, 함수 호출 시 함수 내부로 들어가지 않음

(gdb) bt => 스택을 백트레이스 해 어떤 함수를 호출하다가 문제가 발생했는지 알 수 있음와치 포인트

와치 포인트

  • 변수에 와치포인트를 설정하고 변수가 바뀔 때마다 브레이크가 걸리면서 변수의 이전 값과 현재 값을 출력
(gdb) watch [변수명] 

변수와 레지스트 값 검사

(gdb) info locals => 현재 상태에서의 지역변수 확인

(gdb) info variables => 현재 상태에서의 전역변수 확인

(gdb) p [변수명]

profile
Android 짱이 되고싶은 개발 기록 (+ ios도 조금씩,,👩🏻‍💻)

0개의 댓글