개요
gdb는 프로그램의 실행 흐름을 제어하고, 변수 값을 검사하며, 메모리 상태를 확인하는 등 심층적인 디버깅 기능을 제공합니다. 특히 컴파일된 바이너리 파일의 문제점을 분석하는 데 유용합니다.
주요 기능
- 실행 중인 프로그램 시작/중지
- 중단점(breakpoint) 설정
- 변수 값 검사 및 변경
- 스택 트레이스 확인
- 메모리 내용 검사
- 코어 파일 분석
주요 옵션
gdb는 대화형 모드로 주로 사용되지만, 시작 시 특정 옵션을 통해 초기 설정을 하거나 비대화형 스크립트를 실행할 수 있습니다.
시작/연결 옵션
생성된 명령어:
명령어를 조합해 보세요.
설명:
`gdb` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
gdb는 대화형으로 사용되는 경우가 많으므로, 예시에서는 gdb 프롬프트 내에서 입력하는 명령어도 포함합니다.
기본 디버깅 세션 시작
gdb ./my_program
컴파일된 프로그램(예: my_program)을 gdb로 로드하여 디버깅 세션을 시작합니다.
중단점 설정 및 실행
gdb ./my_program
(gdb) b main
(gdb) r
main 함수에 중단점을 설정하고 프로그램을 실행합니다. 중단점에서 실행이 멈춥니다.
변수 값 확인
gdb ./my_program
(gdb) b my_function
(gdb) r
(gdb) p my_variable
중단점에서 멈춘 후, 특정 변수의 현재 값을 출력합니다.
코어 파일 분석
gdb ./my_program core.dump
프로그램 충돌로 생성된 코어 파일을 사용하여 충돌 당시의 프로그램 상태를 분석합니다.
실행 중인 프로세스에 연결
gdb -p 12345
이미 실행 중인 프로세스 ID(PID) 12345에 gdb를 연결하여 디버깅합니다.
시작 시 명령어 자동 실행
gdb -ex 'b main' -ex 'r' ./my_program
gdb 시작과 동시에 main 함수에 중단점을 설정하고 프로그램을 실행합니다.
설치
gdb는 대부분의 리눅스 배포판에서 기본적으로 제공되지 않으며, 개발 도구 패키지의 일부로 설치해야 합니다.
Debian/Ubuntu
sudo apt update && sudo apt install gdb
APT 패키지 관리자를 사용하여 gdb를 설치합니다.
Fedora/CentOS/RHEL
sudo dnf install gdb
DNF 또는 YUM 패키지 관리자를 사용하여 gdb를 설치합니다.
팁 & 주의사항
gdb를 효과적으로 사용하기 위한 팁과 주의사항입니다.
컴파일 시 디버그 정보 포함
gdb로 디버깅하려면 프로그램을 `-g` 옵션으로 컴파일하여 디버그 정보를 포함해야 합니다. 그렇지 않으면 소스 코드 정보나 변수 이름을 볼 수 없습니다.
- 예시: `gcc -g myprogram.c -o myprogram`
자주 사용하는 gdb 명령어
gdb 프롬프트 내에서 자주 사용되는 핵심 명령어들입니다.
- `b <함수명/라인번호>`: 중단점 설정 (breakpoint)
- `r`: 프로그램 실행 (run)
- `n`: 다음 줄로 이동 (next)
- `s`: 함수 안으로 진입 (step)
- `p <변수명>`: 변수 값 출력 (print)
- `c`: 다음 중단점까지 실행 (continue)
- `q`: gdb 종료 (quit)
TUI 모드 활용
gdb의 텍스트 사용자 인터페이스(TUI) 모드를 활용하면 소스 코드, 레지스터, 어셈블리 등을 함께 보면서 디버깅 효율을 높일 수 있습니다.
- `gdb -tui <program>` 또는 gdb 내에서 `layout src` 명령어 사용