Emacs의 Grand Unified Debugger(GUD)와 GDB 그래픽 인터페이스, 여러 디버거 지원, 브레이크포인트와 변수 감시 같은 기능을 간단한 예제로 살펴봅니다.
~1089 단어. ~5분.
제가 부르고 싶은 이름으로는, GLORIOUS Unified Debugger입니다.
이 글은 June's Emacs Carnival의 Underappreciated Emacs built-ins에 제출한 글입니다.
저는 주로 GDB 그래픽 인터페이스를 사용합니다. 하지만 이것은 다음과 같은 여러 디버거를 지원합니다.
lldb (LLVM 디버거)perldb (Perl 디버거)jdb (Java 디버거)pdb (Python 디버거)guiler (Guile!)dbx (C, C++ 등을 지원하는 디버거)xdb (MS Windows용 디버거 (?))sdb (System Debugger)매뉴얼에는 특별한 GDB GUI 인터페이스만을 다루는 섹션 전체가 있습니다. 이제 그것을 설명해 보겠습니다.
이것이 데모 소스 파일 fibo.c입니다.
#include <stdio.h>
int fibo (int n) { if (n < 2) return 1; else return fibo (n - 1) + fibo (n - 2); }
int main (void) { for (int i = 0; i < 5; i++) printf ("%d: %d\n", i, fibo(i)); }
먼저 다음과 같이 컴파일합니다.
gcc -g fibo.c -o fibo
(-g 플래그는 GDB로 디버깅할 때 필요합니다.)
이제 컴파일된 프로그램이 있으니, 실행을 시도해 볼 수 있습니다.
./fibo
0: 1 1: 1 2: 2 3: 3 4: 5
이제 Emacs에서 gdb gud를 시작할 수 있습니다. 이를 위해 M-x gdb RET fibo RET를 입력하면, *gud-fibo*라는 버퍼가 만들어집니다.
Current directory is /home/tusharhero/Documents/c-scratch/ GNU gdb (GDB) 17.2 Copyright (C) 2025 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: https://www.gnu.org/software/gdb/bugs/. Find the GDB manual and other documentation resources online at: http://www.gnu.org/software/gdb/documentation/.
For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from fibo... (gdb) 직접 이 CLI 인터페이스를 쓰지는 않겠지만, 원한다면 사용할 수 있습니다.
브레이크포인트를 몇 개 설정해 봅시다.
프린지를 클릭해서 GDB 브레이크포인트를 설정합니다.
Video 13
맞습니다. 프린지(텍스트 왼쪽의 공간)를 클릭하기만 하면 자동으로 브레이크포인트가 설정되고, 그것들은 *gud-fibo*에서 다음과 같이 표시됩니다.
Breakpoint 1 at 0x401138: file fibo.c, line 7.
Breakpoint 2 at 0x40113f: file fibo.c, line 9.
Breakpoint 3 at 0x401174: file fibo.c, line 16.
(gdb)
이제 프로그램을 실행해서 디버깅을 시작하겠습니다. 
이 버튼들, 즉 Run, Next Line, Step Line, Up Stack, Down Stack은 도구 모음의 일부입니다.
그러면 곧바로 처음 마주치는 브레이크포인트에서 멈춥니다. (브레이크포인트 3입니다.) 흰색 화살표는 현재 실행 중인 줄을 나타냅니다.

이제 Step Line을 사용해서 fibo 함수 안으로 들어갈 수 있습니다.

이제 Continue용 새 버튼도 생긴 것을 볼 수 있는데, 이것은 다음 브레이크포인트에 도달할 때까지 계속 진행합니다. 그러니 for 루프 안의 브레이크포인트를 꺼 보겠습니다. 이를 위해 전용 브레이크포인트 관리 창을 사용하겠습니다.
Video 14 이제 그냥 continue 버튼을 여러 번 마구 눌러 봅시다.
Video 15
그리고 for 루프 안에서 printf를 호출하고 있으므로, I/O를 위한 전용 팝아웃 창이 있습니다. (출력만을 위한 것이 아니라는 점에 주목하세요.)
그런데 현재 n의 값이 무엇인지 보고 싶다면 어떨까요? 실제로 그것을 확인하는 방법은 꽤 여러 가지가 있습니다.
Video 16 여기서는 값을 보고 싶은 대상 위에 커서를 그냥 올려두기만 하면… 값이 바로 나옵니다? :)
다른 방법은 locals 창을 사용하는 것입니다.
Video 17 하지만 이런 걸 누가 계속 수동으로 추적하고 싶을까요? 변수를 watch에 추가해서 값이 바뀔 때마다 갱신되도록 합시다.
더 많은 기능을 다루고 싶지만, 안타깝게도 그것들을 전부 살펴볼 시간이 없습니다. 아마도 더 많은 기능과 GUD가 지원하는 다른 디버거들을 다루는 일종의 후속 글을 쓰게 될지도 모르겠습니다.
작성자: tusharhero
이메일은 [at]을 @로 바꾸고, 도메인과 사용자명을 서로 바꾸면 됩니다: sdf.org [at] tusharhero
© tusharhero 2024-2026, 자세한 내용은 licenses page를 확인하세요.
날짜: 2026-06-30 Tue 00:00