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에 지시합니다. 무시의 수준은 다양합니다.