GDB-디버깅 프로그램

시작하기 : 시작 및 중지

  • gcc -g myprogram.c

    • 디버깅 옵션 (-g)을 사용하여 myprogram.c를 컴파일합니다. 여전히 a.out을 얻지 만, 원시 메모리 위치가 아닌 GDB 내부에서 변수와 함수 이름을 사용할 수있는 디버깅 정보가 포함되어 있습니다 (재미 있지 않음).

  • gdb a.out

    • a.out 파일로 GDB를 열지 만 프로그램을 실행하지는 않습니다. 프롬프트 (gdb)가 표시됩니다. 모든 예제는이 프롬프트에서 가져온 것입니다.

  • r

  • r arg1 arg2

  • r <파일 1

    • 이전에로드 된 "a.out"을 실행하는 세 가지 방법. 직접 실행 (r)하거나 인수를 전달 (r arg1 arg2)하거나 파일을 공급할 수 있습니다. 일반적으로 실행하기 전에 중단 점을 설정합니다.

  • help

  • h 중단 점

    • 도움말 항목 (도움말)을 나열하거나 특정 항목에 대한 도움말을 얻습니다 (h 중단 점). GDB는 잘 문서화되어 있습니다.

  • q-GDB 종료

코드 단계별 실행

스테핑을 사용하면 프로그램의 경로를 추적하고 크래시되거나 잘못된 입력을 반환하는 코드에 집중할 수 있습니다.

  • l

  • 내가 50

  • l 내 기능

    • 현재 줄 (l), 특정 줄 (l 50) 또는 함수 (l myfunction)에 대한 10 줄의 소스 코드를 나열합니다.

  • 다음

    • 다음 줄까지 프로그램을 실행 한 다음 일시 중지합니다. 현재 줄이 함수이면 전체 함수를 실행 한 다음 일시 중지합니다.next 코드를 빠르게 살펴 보는 데 좋습니다.

  • 단계

    • 라인이 아닌 다음 명령어를 실행합니다. 현재 명령어가 변수를 설정하는 경우 다음과 같습니다.next. 함수 인 경우 함수로 점프하여 첫 번째 문을 실행 한 다음 일시 중지합니다.step 코드의 세부 사항을 살펴 보는 데 좋습니다.

    • 현재 기능 실행을 완료 한 다음 일시 중지 (탈출이라고도 함). 실수로 함수에 들어간 경우 유용합니다.

중단 점 또는 감시 점

중단 점은 디버깅에서 중요한 역할을합니다. 특정 지점에 도달하면 프로그램을 일시 중지 (중단)합니다. 변수를 검사 및 변경하고 실행을 재개 할 수 있습니다. 이는 일부 입력 실패가 발생하거나 입력을 테스트 할 때 유용합니다.

  • 휴식 45

  • 내 기능을 깰

    • 45 행 또는 myfunction에 중단 점을 설정합니다. 중단 점에 도달하면 프로그램이 일시 중지됩니다.
  • 시계 x == 3

    • 조건이 변경 될 때 (x == 3이 변경 될 때) 프로그램을 일시 중지하는 감시 점을 설정합니다. 감시 점은 모든 함수 호출 에서 중단 할 필요없이 특정 입력 (myPtr! = NULL)에 적합 합니다 .

  • 계속하다

    • 중단 점 / 감시 점에 의해 일시 중지 된 후 실행을 다시 시작합니다. 프로그램은 다음 중단 점 / 감시 점에 도달 할 때까지 계속됩니다.

  • N 삭제

    • 중단 점 N을 삭제합니다 (중단 점은 생성 될 때 번호가 매겨 짐).

변수 설정

런타임에 변수를보고 변경하는 것은 디버깅의 중요한 부분입니다. 함수에 잘못된 입력을 제공하거나 다른 테스트 케이스를 실행하여 문제의 근본 원인을 찾으십시오. 일반적으로 프로그램이 일시 중지 될 때 변수를 보거나 설정합니다.

  • x 인쇄

    • 변수 x의 현재 값을 인쇄합니다. 원래 변수 이름을 사용할 수 있다는 것이 (-g) 플래그가 필요한 이유입니다. 정기적으로 컴파일 된 프로그램은이 정보를 제거합니다.

  • x = 3으로 설정

  • x = y로 설정

    • x를 설정 값 (3) 또는 다른 변수 (y)로 설정합니다.
  • myfunction () 호출

  • myotherfunction (x) 호출

  • strlen (mystring) 호출

    • 사용자 정의 또는 시스템 함수를 호출합니다. 이것은 매우 유용하지만 버그가있는 함수 호출에주의하십시오.

  • 디스플레이 x

    • 모든 단계 또는 일시 중지 후에 표시되는 변수 x의 값을 지속적으로 표시합니다. 특정 값을 지속적으로 확인하는 경우 유용합니다.

  • x 표시 해제

    • display 명령으로 표시되는 변수의 상수 표시를 제거합니다.

역 추적 및 프레임 변경

스택은 현재 함수 호출 목록입니다. 프로그램에서 현재 위치를 보여줍니다. 프레임 등의 인수로 하나의 함수 호출의 세부 사항을 저장합니다.

  • bt

    • Backtraces또는 현재 프로그램에서 현재 위치를 표시하기 위해 현재 함수 스택을 인쇄합니다. main이 c ()를 호출하는 b ()를 호출하는 함수 a ()를 호출하면 역 추적은

  • c <= current location 
    b 
    a 
    main
  • up

  • 하위

    • 함수 스택에서 위 또는 아래로 다음 프레임으로 이동합니다. 당신이에 있다면c, 당신은 이동할 수 있습니다 b 또는 a 지역 변수를 조사합니다.

  • 반환

    • 현재 함수에서 반환합니다.

신호 처리

신호는 타이머 또는 오류와 같은 특정 이벤트 후에 발생하는 메시지입니다. GDB는 신호를 발견하면 일시 중지 할 수 있습니다. 대신 무시할 수 있습니다.

  • 핸들 [신호명] [동작]

  • SIGUSR1 nostop 처리

  • SIGUSR1 noprint 처리

  • SIGUSR1 처리 무시

    • 특정 신호 (SIGUSR1)가 발생하면 무시하도록 GDB에 지시합니다. 무시의 수준은 다양합니다.