GDB 사용 설명서

약술 하 다
파일 목록
실행 프로그램
3: 데이터 표시
4: 정지점 (breakpoint)
정지점 관리
6. 변수의 검사 와 할당
일방 통행
함수 호출
9. 기계 언어 도구
신호
GDB 사용법
약술 하 다
파일 목록
  • List
    (gdb) list line1,line2
    

  • 실행 프로그램
    디 버 깅 을 준비 하 는 프로그램 을 실행 하려 면 run 명령 을 사용 할 수 있 습 니 다. 그 뒤에 이 프로그램 에 보 내 는 모든 인 자 를 따라 갈 수 있 습 니 다. 표준 입력 과 표준 출력 설명자 (< 와 >) 와 케이스 어댑터 (*,?, [,] 를 포함 합 니 다.인자 가 없 는 run 명령 을 사용 하면 gdb 는 이전 run 명령 의 인 자 를 다시 사용 합 니 다. 이것 은 매우 유용 합 니 다.set args 명령 을 이용 하면 프로그램 에 보 내 는 인 자 를 수정 할 수 있 으 며, show args 명령 을 사용 하면 결 성 된 인자 의 목록 을 볼 수 있 습 니 다.
    (gdb)set args –b –x
    (gdb) show args
    backtrace命令为堆栈提供向后跟踪功能。
    Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。
    
    

    3: 데이터 표시
  • print 명령 을 이용 하여 각 변수의 값 을 검사 할 수 있 습 니 다.
    (gdb) print p (p为变量名)
    
    print 는 gdb 의 기능 이 매우 강 한 명령 으로 디 버 깅 된 언어 에서 효과 적 인 표현 식 을 표시 할 수 있 습 니 다.표현 식 은 프로그램의 변 수 를 포함 하 는 것 외 에 다음 과 같은 내용 도 포함 할 수 있 습 니 다.
  • 프로그램 에서 함수 호출
    (gdb) print find_entry(1,0)
    
  • 데이터 구조 와 기타 복잡 한 대상
    (gdb) print *table_start
    $8={e=reference=’/000’,location=0x0,next=0x0}
    
  • 값 의 역사적 성분
    (gdb)print $1 ($1为历史记录变量,在以后可以直接引用 $1 的值)
    
  • 은 배열 을 위해 메모리 블록 (배열 절 또는 동적 으로 분 배 된 저장 소) 내용 을 표시 하 는 방법 을 제공 했다.초기 디 버 깅 프로그램 은 임의의 지침 을 배열 로 바 꾸 는 좋 은 방법 이 없 었 다.매개 변수 와 같이 메모리 에 있 는 변수 h 뒤에 있 는 10 개의 정 수 를 보 여 줍 니 다. 하나의 동적 배열 의 문법 은 다음 과 같 습 니 다.base@length따라서 h 뒤에 있 는 10 개의 요 소 를 표시 하려 면 사용 할 수 있 습 니 다.h@10:
    (gdb)print h@10
    $13=(-1,345,23,-234,0,0,0,98,345,10)
    
  • whatis 명령 은 특정한 변수의 유형 을 표시 할 수 있 습 니 다
    (gdb) whatis p
    type = int *
    
  • 4: 정지점 (breakpoint)
    break 명령 (b 로 간략화 가능) 은 디 버 깅 프로그램 에서 정지점 을 설정 할 수 있 습 니 다. 이 명령 은 다음 과 같은 네 가지 형식 이 있 습 니 다.
  • break line - number 는 프로그램 이 주어진 줄 을 실행 하기 전에 중단 합 니 다.
  • break function - name 은 프로그램 이 지정 한 함수 에 들 어가 기 전에 중단 합 니 다.
  • break line - or - function if condition 이 condition (조건) 이 사실 이 라면 프로그램 이 지정 한 줄 이나 함수 에 도 착 했 을 때 중단 합 니 다.
  • break routine - name 은 지정 한 루틴 의 입구 에 정지점 을 설정 합 니 다
  • 이 프로그램 이 많은 원본 파일 로 구성 되 어 있다 면 현재 원본 파일 에 정지점 을 설정 하 는 것 이 아니 라 각 원본 파일 에 정지점 을 설정 할 수 있 습 니 다. 그 방법 은 다음 과 같 습 니 다.
    (gdb) break filename:line-number
    (gdb) break filename:function-name
    
    

    조건 부 정지점 을 설정 하려 면 break if 명령 을 사용 할 수 있 습 니 다. 다음 과 같 습 니 다.
    (gdb) break line-or-function if expr
    例:
    (gdb) break 46 if testsize==100
    
    

    정지점 에서 계속 실행: continue 명령
    정지점 관리
    1. 현재 gdb 의 정지점 정보 보이 기:
    (gdb) info break
    
    

    그 는 다음 과 같은 형식 으로 모든 정지점 정 보 를 표시 할 것 이다.
    Num Type Disp Enb Address What
    1 breakpoint keep y 0x000028bc in init_random at qsort2.c:155
    2 breakpoint keep y 0x0000291c in init_organ at qsort2.c:168
    
    
  • 지정 한 정지점 을 삭제 합 니 다.
    (gdb) delete breakpoint 1
    
    이 명령 은 번호 가 1 인 정지점 을 삭제 합 니 다. 번호 파라미터 가 없 으 면 모든 정지점
    (gdb) delete breakpoint
    
  • 을 삭제 합 니 다. 정지점 사용 금지
    (gdb) disable breakpoint 1
    
    이 명령 은 정지점 1 을 금지 하고 정지점 정 보 를 차단 하 는 (Enb) 도 메 인 은 n
  • 으로 변 합 니 다.이 명령 은 정지점 1 을 허용 하고 정지점 정보의 (Enb) 도 메 인 은 y
  • 로 변 경 됩 니 다. 원본 파일 의 한 코드 줄 의 모든 정지점
    (gdb) enable breakpoint 1
    
    주: number 는 원본 파일 의 한 코드 줄 의 줄 번호
  • 입 니 다.
    6. 변수의 검사 와 할당
  • whatis: 배열 이나 변 수 를 식별 하 는 유형
  • ptype: whatis 보다 기능 이 강하 다. 그 는 구조 적 정의
  • set variable: 값 을 변수
  • print 에 부여 할 수 있다.
    일방 통행
  • next 가 들 어가 지 않 는 한 단계 실행
  • step 가 들 어 가 는 한 단계 실행 이 함수 에 들 어 갔 을 때 이 함 수 를 종료 하고 호출 함수 로 돌아 가 려 면 명령 finish
  • 를 사용 할 수 있 습 니 다.
    함수 호출
  • callname 호출 및 실행 함수
    (gdb)clean number
    
  • finish 가 현재 함 수 를 실행 하고 반환 값 을 표시 합 니 다 (있 으 면)
  • 9. 기계 언어 도구
    gdb 변 수 는 컴퓨터 의 유 니 버 설 레지스터 를 검사 하고 수정 할 수 있 는 전용 gdb 변 수 를 제공 합 니 다. gdb 는 현재 모든 컴퓨터 에서 실제 사용 하고 있 는 4 개의 레지스터 의 표준 이름 을 제공 합 니 다.
  • $pc: 프로그램 카운터
  • $fp: 프레임 포인터 (현재 스 택 프레임)
  • $sp: 스 택 포인터
  • $ps: 프로세서 상태
  • 신호
    gdb 는 보통 대부분의 신 호 를 포착 할 수 있 습 니 다. 신 호 를 포착 하면 실행 중인 프로 세 스에 대해 어떤 일 을 해 야 할 지 결정 할 수 있 습 니 다.예 를 들 어 CTRL - C 를 누 르 면 중단 신 호 를 gdb 에 보 내 면 gdb 가 종 료 됩 니 다.그러나 gdb 를 중단 하고 싶 지 않 을 수도 있 습 니 다. 진정한 목적 은 gdb 가 실행 중인 프로그램 을 중단 하 는 것 입 니 다. 따라서 gdb 는 이 신 호 를 잡 고 실행 중인 프로그램 을 중단 해 야 합 니 다. 그러면 일부 디 버 깅 작업 을 수행 할 수 있 습 니 다.
    Handle 명령 은 신호 처 리 를 제어 할 수 있 습 니 다. 그 는 두 개의 매개 변 수 를 가지 고 있 습 니 다. 하 나 는 신호 이름 이 고 다른 하 나 는 신 호 를 받 을 때 무엇 을 해 야 합 니까?몇 가지 가능 한 매개 변 수 는:
  • nostop 이 신 호 를 받 았 을 때 프로그램 에 보 내지 말고 프로그램 을 멈 추 지 마 세 요.
  • stop 이 신 호 를 받 았 을 때 프로그램의 실행 을 중단 하고 프로그램 디 버 깅 을 허용 합 니 다.신 호 를 받 았 다 는 메시지 (메시지 사용 금지 제외)
  • print 가 신 호 를 받 았 을 때 메시지
  • noprint 가 신 호 를 받 았 을 때 메 시 지 를 표시 하지 마 십시오 (프로그램 실행 을 멈 추 지 않 음)
  • pass 가 프로그램 에 신 호 를 보 내 프로그램 이 처리 할 수 있 도록 합 니 다.운행 을 정지 하거나 다른 동작 을 취하 다.
  • nopass 는 프로그램 운행 을 중단 하지만 프로그램 에 신 호 를 보 내지 마 십시오.

  • 예 를 들 어 디 버 깅 중인 프로그램 이 이 신 호 를 받 아들 이지 않도록 SIGPIPE 신 호 를 캡 처 했다 고 가정 하고 이 신호 가 도착 하면 프로그램 이 중단 되 고 알려 달라 고 요구 합 니 다.이 임 무 를 완성 하려 면 다음 명령 을 사용 할 수 있 습 니 다.
    (gdb) call gen_and_sork( 1234,1,0 )
    (gdb) call printf(“abcd”)
    $1=4
    

    유 닉 스 의 신호 명 은 항상 대문자 로 되 어 있 으 니 주의 하 세 요!신호 이름 대신 신호 번 호 를 사용 할 수 있 습 니 다. 프로그램 이 모든 신호 처리 작업 을 수행 하려 면 신호 처리 프로그램 을 테스트 할 수 있어 야 합 니 다. 이 를 위해 서 는 신 호 를 프로그램 에 보 낼 수 있 는 간편 한 방법 이 필요 합 니 다. 이것 이 바로 signal 명령 의 임무 입 니 다.이 명령 의 인 자 는 SIGINT 와 같은 숫자 나 이름 입 니 다.프로그램 이 전용 SIGINT (키보드 입력 또는 CTRL - C; 신호 2) 신호 처리 프로그램 을 청소 동작 으로 설정 했다 고 가정 합 니 다. 이 신호 처리 프로그램 을 테스트 하려 면 정지점 을 설정 하고 다음 명령 을 사용 할 수 있 습 니 다.
    (gdb) handle SIGPIPE stop print
    
    

    이 프로그램 은 계속 실행 되 지만 즉시 이 신 호 를 전송 하고 처리 프로그램 이 실행 되 기 시작 합 니 다.
    GDB 사용법
    (gdb) signal 2
    continuing with signal SIGINT(2)
    
    

    좋은 웹페이지 즐겨찾기