HOWTO · Bash
Bash 스크립트에서 GDB를 실행하는 방법
디버깅 기호를 포함하여 C 프로그램을 컴파일하고, Bash에서 GDB로 실행하고, 프로그램 인수를 전달하고, 디버거 명령을 자동화합니다.
이 페이지의 내용
Bash에서 GDB로 프로그램을 실행하려면 gdb를 --args와 함께 호출한 뒤 실행 파일과 그 인수를 지정합니다. 스크립트가 프로그램을 자동으로 시작해야 할 때는 -ex run을 추가합니다. 이것이 없으면 GDB는 프롬프트를 열고 명령을 기다립니다. 이 가이드에서는 작은 C 프로그램을 준비하고, 명령을 안전하게 구성하며, 대화형, 중단점, 명령 파일 워크플로를 보여줍니다. 이 글에 제공된 런타임에는 GDB가 포함되어 있지 않으므로, 아래의 디버거 명령은 문서화된 것이며 실행된 출력으로 제시되는 것은 아닙니다.
GDB용 프로그램 준비하기
아래 예제는 작은 C 프로그램을 임시 디렉터리에 쓰고, GCC의 -g 옵션으로 컴파일한 다음, 인수를 주어 실행합니다. 디버그 기호를 통해 GDB는 기계 명령을 소스 줄 및 변수와 연결할 수 있습니다. 임시 파일은 스크립트가 종료될 때 제거됩니다.
set -eu
workdir=$(mktemp -d)
trap 'rm -rf "$workdir"' EXIT
cat > "$workdir/example.c" <<'C'
#include <stdio.h>
int main(int argc, char **argv) {
if (argc > 1) {
printf("Argument: %s\n", argv[1]);
}
return 0;
}
C
gcc -g -o "$workdir/example" "$workdir/example.c"
cd "$workdir"
program=./example
"$program" hello
printf 'gdb --quiet -ex run --args %s hello\n' "$program"
Argument: hello
gdb --quiet -ex run --args ./example hello
이 실행 파일은 선택적 값 하나를 받습니다. 여기서는 hello가 출력됩니다. GDB를 시작할 때는 --args 뒤에 동일한 실행 파일 경로와 인수를 사용하십시오. 아래의 GDB 명령을 사용하려면 이를 실행하는 시스템에 GDB와 컴파일된 실행 파일이 필요합니다.
Bash 스크립트에서 GDB 실행하기
Bash 스크립트는 실행 파일과 인수를 변수에 저장한 뒤 --args 뒤에 전달할 수 있습니다. 앞의 예제는 GDB가 설치되어 있지 않아도 조립된 명령을 미리 보여줍니다. 스크립트에서 실제 디버깅 세션을 시작하려면 gdb --quiet -ex run --args "$program" "$argument"를 사용합니다. --quiet 옵션은 GDB의 소개 메시지를 숨기고, -ex는 뒤에 오는 GDB 명령을 실행합니다. -ex run은 프로그램을 시작합니다. 이를 생략하면 GDB가 (gdb) 프롬프트에서 시작합니다. 상호 작용하려면 -ex run을 생략하고 해당 프롬프트에서 run을 입력합니다. 변수 확장을 따옴표로 묶어 공백이 포함된 인수가 하나의 인수로 유지되도록 하십시오. 이러한 디버거 호출에는 스크립트를 실행하는 시스템에 GDB와 컴파일된 example 실행 파일이 필요합니다.
중단점 설정 및 실행 검사
프로그램이 main에 진입할 때 일시 중지하려면 -ex run 앞에 -ex 'break main'을 추가합니다. 예: gdb --quiet -ex 'break main' -ex run --args ./example hello. GDB는 main의 본문을 실행하기 전에 중단점에서 멈춥니다. 프롬프트에서 print argc와 print argv[1]로 인수를 검사한 다음 continue로 계속 진행합니다. bt 명령은 현재 호출 스택을 출력합니다. 중단점에 있거나 충돌이 발생한 뒤 등 실행이 일시 중지된 동안 유용합니다. 이미 종료된 일반적인 실행에는 검사할 활성 호출 스택이 없습니다.
명령 파일로 GDB 자동화하기
반복 가능한 디버거 단계를 위해 GDB 명령을 gdb_commands.txt라는 이름의 일반 텍스트 파일에 넣습니다.
break main
run
print argc
해당 파일을 gdb --quiet -x gdb_commands.txt --args ./example hello로 불러옵니다. GDB는 나열된 명령을 순서대로 처리하면서 main에서 멈추고, 프로그램을 실행한 뒤, argc를 출력합니다. Bash 스크립트에 내장되는 짧은 명령 시퀀스에는 -ex를 사용하고, 더 길거나 재사용 가능한 시퀀스를 별도의 파일에 보관할 때는 -x를 사용합니다. 명령 파일에는 GDB 명령이 들어 있고, --args는 실행 파일과 프로그램의 인수를 제공합니다.