programming/C

GDB- 정리

KoTiv 2022. 4. 29. 11:19
반응형
SMALL

1. 시작과 종료

  • 시작 : gdb [프로그램명] / gdb [ 프로그램명] [core파일명] / gdb [프로그램명] [실행중인 프로세스 pid]
  • 종료 : Ctrl+D , q

 

2. 소스 보기 (list/l)

  • list : main 함수 기점으로 소스 출력
  • list 5 : 5행을 기준으로 출력
  • list func : func 함수의 소스 출력
  • list - : 이전 행의 소스  출력

3. 브레이크 포인트 (break/b) - 중단점 설정 / 확인 / 해제

  • break <함수이름> : 함수의 시작 부분에 브레이크 포인트 설정
  • break <라인번호> : 라인번호에 브레이크 포인트 설정
  • break <파일이름:라인번호> : 파일의 라인번호에 브레이크 포인트 설정
  • break <파일이름: 함수이름> : 해당 파일의 함수에 브레이크 포인트 설정
  • break +<offset> : 현재 위치에서 오프렛 라인 뒤에 설정 
  • break -<offset> : 현재 위치에서 오프셋 라인 뒤에 설정
  • break *address : 이미지의 주소 영역을 breakpoint로 설정 
  • break <... > if <condition> : condition이 만족할때만 중단.
  • info break (ib) : 중단점 확인
  • clear 중단점 지정후 지우기
  • clear <설정된 함수이름>
  • clear <설정된 라인번호>
  • clear <설정된 파일이름:라인번호>
  • clear <설정된 파일이름:함수이름>
  • delete : 중단점 지우기
  • delete <breakpoint 번호> 번호에 해당하는 중단점을 지운다.
  • delete <breakpoint 번호> <breakpoint 번호> 번호에 해당하는 중단점을 모두 삭제.
  • disable /enable : 중단점을 활성화/비활성화 한다.
  • en 모든 중단점 활성화
  • enable 모든 중단점 활성화
  • enable <중단점 번호> 해당 중단점 활성화
  • enable <중단점 번호> <중단점 번호> 해당 중단점 모두 활성화
  • dis 모든 중단점 비활성화
  • disable 모든 중단점 비활성화
  • disable <중단점 번호> 해당 중단점 비활성화
  • disable <중단점 번호> <중단점 번호> 해당 중단점 모두 비활성화  
  • tb : temporary breakpoint 일시적 브레이크 포인트
  • cl : 브레이크 포인트 지우기 (옵션 동일)
  • d : 모든 브레이크 포인트 지우기

4. 진행 명령어

  • run (r) : 프로그램 수행
  • kill (k) : 프로그램 종료
  • step (s) : 현재 행 수행 후 다음 행으로 이동. 함수 실행 시 함수 내부의 행으로 이동 (어셈블리 단위 : si)
  • next (n) : 현재 행 수행 후 다음 행으로 이동. 함수 실행 시 함수 전체 실행 다음 행으로 이동 (어셈블리 단위 : ni)
  • continue (c) : 다음 브레이크 포인트까지 실행
  • u : 현재 루프를 빠져나감
  • finish : 함수 수행 후 빠져나감
  • return : 함수 수행 중단 후 빠져나감 (return 1 처럼 옵션으로 리턴값 지정 가능)
  • watch 변수명 : 특정 변수에 와치 포인트를 설정하고, 변수값이 변하는 지점마다 브레이크가 걸리면서 이전/현재값 출력한다. 

5. 변수 출력 관련 (info, p)

  • info break : 현재 브레이크 포인트 보기
  • info locals : 현재 스택의 로컬변수 모두 출력
  • info variables : 현재 전역변수 모두 출력
  • info registers : 레지스터 전체 출력
  • info all-registers : 레지스터 전체 출력 (MMX 포함)
  • info args : 함수 호출 시 인자를 출력
  • info catch : 함수의 예외 핸들러를 출력
  • p [변수명] : 변수값 출력
  • p $[레지스터명] : 레지스터값 출력

6. 스택 상태 검사

  • info f [프레임 번호] : 스택 프레임 내용 출력
  • bt : 전체 스택 프레임 출력
  • breaktrace : 현 위치의 함수 call stack을 출력.
  • bt N 현 실행 위치의 함수 call stack중 처음 n개 출력
  • bt -n 현 실행 위치의 함수 call stack중 마지막 n개 출력
  • bt full  local 변수들도 함께 출력
  • frame [스택번호] : 스택번호의 스택 프레임으로 이동
  • up : 상위 스택프레임으로 이동 (up 2 : 2만큼 상위 프레임으로 이동)
  • down : 하위 스택프레임으로 이동 ( down 2 : 2만큼 하위 프레임으로 이동)

7. 어셈블리 코드 및 기타

  • disas func : func 함수의 어셈블리 코드를 출력
  • jump 10 : 10 행으로 강제 분기
  • jump func : func 함수로 강제 분기

8. 값 출력 / 변경 

  • print 변수 /주소 등을 출력
  • print <val> 변수 출력
  • p <val> 
  • p <func::val> 해당 함수의 변수 출력
  • p *<ptr> 포인터 값 출력
  • p <addr> 주소에 있는 값 출력
  • p arr[n] arr배열의 n번째 값 출력
  • display 매 실행 step , next, continue등 마다 출력
반응형
LIST