Linux의 C 언어 기본 디버거: gdb 사용법 가이드
C 언어는 시스템 프로그래밍에 널리 사용되는 강력한 언어이지만, 디버깅 과정은 복잡할 수 있습니다. Linux에서 C 프로그램을 디버깅할 때 가장 널리 사용되는 도구는 gdb (GNU Debugger)입니다. 이 포스팅에서는 gdb를 사용하여 C 프로그램을 효과적으로 디버깅하는 방법을 단계별로 설명하겠습니다.
1. gdb란?
gdb는 GNU 프로젝트의 일부로, 프로그램을 디버깅하고 실행 중인 프로그램의 내부를 조사할 수 있는 강력한 디버거입니다. gdb는 다음과 같은 기능을 제공합니다:
- 프로그램 실행 중단 (breakpoints)
- 변수 값 검사 및 변경
- 함수 호출 추적
- 메모리 및 레지스터 상태 조사
2. gdb 설치
대부분의 Linux 배포판에는 gdb가 기본적으로 설치되어 있습니다. 설치되지 않은 경우, 다음 명령어를 사용하여 설치할 수 있습니다:
sudo apt-get update
sudo apt-get install gdb
3. gdb 사용법
gdb를 사용하여 C 프로그램을 디버깅하려면 다음 단계를 따릅니다:
1. 프로그램 컴파일
디버깅 정보를 포함하여 프로그램을 컴파일합니다. 이를 위해 -g
옵션을 사용합니다.
gcc -g -o my_program my_program.c
2. gdb 실행
gdb를 실행하고 디버깅할 프로그램을 로드합니다.
gdb ./my_program
3. 주요 gdb 명령어
gdb에서는 다양한 명령어를 사용하여 프로그램을 디버깅할 수 있습니다. 주요 명령어는 다음과 같습니다:
break: 브레이크포인트를 설정합니다. 프로그램 실행이 지정된 위치에서 중단됩니다.
(gdb) break main (gdb) break my_program.c:10
run: 프로그램을 실행합니다.
(gdb) run
next: 다음 줄로 넘어갑니다. 함수 호출은 실행되지만 내부로 들어가지 않습니다.
(gdb) next
step: 다음 줄로 넘어갑니다. 함수 호출이 있을 경우, 함수 내부로 들어갑니다.
(gdb) step
print: 변수의 값을 출력합니다.
(gdb) print variable_name
continue: 프로그램 실행을 계속합니다. 다음 브레이크포인트에서 중단됩니다.
(gdb) continue
backtrace: 함수 호출 스택을 출력합니다.
(gdb) backtrace
quit: gdb를 종료합니다.
(gdb) quit
4. 예제 디버깅 세션
간단한 C 프로그램을 작성하고 gdb로 디버깅해봅니다.
예제 프로그램 (example.c)
#include <stdio.h>
void foo(int x) {
printf("x is %d\n", x);
}
int main() {
int a = 10;
foo(a);
a = 20;
foo(a);
return 0;
}
컴파일
gcc -g -o example example.c
gdb 디버깅 세션
gdb 실행 및 프로그램 로드:
gdb ./example
main 함수에 브레이크포인트 설정:
(gdb) break main
프로그램 실행:
(gdb) run
다음 줄로 이동:
(gdb) next
변수 a의 값 출력:
(gdb) print a
함수 내부로 이동:
(gdb) step
함수 호출 스택 출력:
(gdb) backtrace
프로그램 실행 계속:
(gdb) continue
gdb 종료:
(gdb) quit
5. 결론
gdb는 Linux 환경에서 C 프로그램을 디버깅하는 데 매우 유용한 도구입니다. 이 가이드를 통해 gdb를 설치하고 사용하는 방법을 익히고, 디버깅 과정에서 발생할 수 있는 다양한 문제를 해결할 수 있습니다. gdb를 잘 활용하여 더 안정적이고 효율적인 프로그램을 작성해 보세요.
더 많은 정보를 원하시면 GNU gdb 공식 문서를 참고하시기 바랍니다.