반응형
리눅스 GDB (GNU Debugger) 명령어 사용법 정리 (core 덤프)
GDB는 C/C++ 등의 프로그램을 실행하면서 중단점 설정, 변수 확인, 스택 분석 등을 수행할 수 있는 대표적인 디버깅 도구입니다.
1. 기본 도움말 (help)
GDB는 help 명령으로 모든 기능을 탐색할 수 있습니다.
기본 사용법
(gdb) help
- 전체 명령어 분류(Class) 목록 출력
(gdb) help <class>
- 특정 분류에 속한 명령어 목록 확인
(gdb) help <command>
- 특정 명령어 상세 설명 확인
주요 명령어 분류 (Class)
- breakpoints : 중단점 설정/관리
- running : 프로그램 실행 제어
- stack : 스택 프레임 분석
- data : 변수 및 메모리 검사
- files : 실행 파일 및 심볼 관리
- status : 상태 정보 확인
- support : 편의 기능
- user-defined : 사용자 정의 명령
- aliases : 명령어 별칭
- internals : 내부/유지보수용
- obscure : 기타 기능
클래스 및 명령어는 축약형 사용 가능
예: h b → help breakpoints
2. 프로그램 실행 (Running)
(gdb) run
- 프로그램 실행 시작
(gdb) run arg1 arg2
- 실행 시 인자 전달
(gdb) continue
- 중단된 프로그램 계속 실행
3. 스택(Stack) 분석
스택 개념
- 함수 호출 시 스택 프레임 생성
- GDB는 프레임에 번호 부여
- 0 → 현재 실행 중 함수 (가장 안쪽)
- 숫자가 커질수록 호출 상위 함수
주요 명령어
전체 스택 출력
(gdb) bt
또는
(gdb) backtrace
- 현재 호출 스택 전체 출력
특정 깊이까지 출력
(gdb) bt 5
- 안쪽부터 5개 프레임 출력
(gdb) bt -5
- 바깥쪽 기준 5개 프레임 출력
프레임 선택
(gdb) frame 2
- 2번 프레임으로 이동 + 출력
(gdb) select-frame 2
- 출력 없이 프레임만 변경
프레임 이동
(gdb) up
- 상위 호출 함수로 이동
(gdb) down
- 하위 호출 함수로 이동
함수 강제 리턴
(gdb) return
- 현재 함수 강제 종료 후 호출자에게 복귀
(gdb) return 0
- 특정 값 반환
728x90
4. 중단점 (Breakpoints)
(gdb) break main
- main 함수에 중단점 설정
(gdb) info breakpoints
- 특정 파일/라인에 중단점 설정
(gdb) info breakpoints
- 중단점 목록 확인
(gdb) delete 1
- 1번 중단점 삭제
5. 데이터 및 변수 확인 (Data)
(gdb) print 변수명
- 변수 값 출력
(gdb) display 변수명
- 실행 중 자동 출력
(gdb) info locals
- 현재 함수의 지역 변수 출력
6. 파일 및 실행 환경 (Files)
(gdb) file ./a.out
- 디버깅 대상 실행 파일 지정
(gdb) list
- 소스 코드 출력
7. 실무 디버깅 흐름 (권장)
gdb ./app
(gdb) break main
(gdb) run
(gdb) bt
(gdb) info locals
(gdb) next
(gdb) step
(gdb) continue
8. 실무 팁
1. 디버그 심볼 포함 컴파일
gcc -g -o app app.c
- -g 옵션 없으면 디버깅 정보 부족
2. 코어 덤프 분석
gdb ./app core
(gdb) bt
- 장애 분석 시 필수
3. 로그 대신 GDB 활용
- Segmentation Fault 원인 분석
- 무한 루프 추적
- 메모리 문제 확인
728x90
반응형
'리눅스' 카테고리의 다른 글
| CentOS 6.4 YUM 기반 Apache + Tomcat6 연동하는 방법 (0) | 2013.08.16 |
|---|---|
| 리눅스 쉘에서 MySQL DB 및 테이블을 생성하는 방법 (2) | 2013.08.14 |
| NFS(Network File System)를 구축하는 방법 (0) | 2013.08.13 |
| Rkhunter(Rootkit Hunter)을 소스 코드로부터 컴파일하여 설치하는 방법 (0) | 2013.08.05 |
| 리눅스 useradd 명령어 사용법 정리 (1) | 2013.08.05 |