반응형
gdb란?
실행 중인 C 프로그램을 원하는 지점에서 멈추고, 그 순간의 변수 값, 메모리, 호출 스택을 들여다보는 도구이다.
사용방법
gcc 로 컴파일
C 언어 - GCC 정리
gcc란gcc는 .c 파일을 CPU가 실행할 수 있는 파일로 번역하는 프로그램이다. gcc -Wall -g hello.c -o hello # 컴파일./hello # 실행 gcc 는 전처리 → 컴파일 → 어셈블 → 링크를 한 번에 해준다. 에러 종류를
skylarcoding.tistory.com
gcc -g -O0 -Wall main.c -o main
나는 보통 run → bt → b (에러난 줄) → r (재실행) → n & info locals 로 문제 확인 흐름으로 진행한다.
핵심 명령어
| run | r | 프로그램 실행 (인자: r arg1 arg2) |
| break main / break 20 | b | 함수나 줄 번호에 중단점 설정 |
| next | n | 한 줄 실행 (함수 호출 건너뜀) |
| step | s | 한 줄 실행 (함수 안으로 들어감) |
| continue | c | 다음 중단점까지 계속 실행 |
| finish | 현재 함수가 끝날 때까지 실행 | |
| print p | p | 변수, 식 출력 (p *ptr, p ptr->x, p arr[3]) |
| print *arr@5 | 포인터가 가리키는 곳부터 원소 5개 출력 | |
| display i | 멈출 때마다 자동으로 i 출력 | |
| backtrace | bt | 호출 스택 출력 (누가 누구를 불렀는지) |
| frame 2 | f | 스택의 2번 프레임으로 이동해서 그 함수의 변수 확인 |
| info locals | 현재 함수의 지역 변수 전부 출력 | |
| watch x | x값이 바뀌는 순간 멈춤 | |
| list | l | 현재 위치 주변 소스 출력 |
| quit | q | 종료 |
- watch : 누가 이 값을 망가뜨렸나 찾을 때 사용한다.
- 어떤 구조체 필드가 엉뚱한 값으로 바뀌는데 어디서 바뀌는 지 모를 때, watch node -> next 같은 식으로 걸어두면 값이 바뀌는 그 줄에서 멈춘다.
- 조건부 중단점
- 반복문 중 특정 경우만 보고 싶을 때
- b 12 if i == 500 처럼 사용한다.
반응형