Journey to Security/C언어

GDB TUI 모드: 소스 코드를 보며 디버깅하기

Cordilog 2026. 2. 23. 19:00

GDB를 사용할 때 CLI만으로는 현재 실행 중인 소스 코드의 위치를 파악하기 어려울 때가 있다.

이때 TUI(Text User Interface) 모드를 사용하면 터미널 화면을 분할하여 소스 코드, 어셈블리, 레지스터 상태를 실시간으로 확인하며 디버깅할 수 있다.

 

1. GDB TUI 개요 및 주요 기능

TUI(Text User Interface) 모드란?

GDB의 기본 텍스트 모드를 확장하여, 터미널 화면을 여러 개의 창으로 나누어 보여주는 기능이다.

별도의 GUI 프로그램 없이도 시각적인 디버깅 환경을 제공한다.

  • 화면 분할: 소스 코드(Source), 어셈블리(Assembly), 레지스터(Register), 명령창(Command)을 동시에 확인 가능.
  • 실시간 하이라이트: 현재 실행 중인 라인을 소스 코드 상에서 직접 표시.
  • 상태 업데이트: 프로그램이 실행됨에 따라 변수 값이나 레지스터 변화를 즉각 반영.

 

2. GDB TUI 실행 옵션 및 명령어

1) 실행 옵션

gdb -tui [program]: GDB를 시작할 때부터 TUI 모드로 진입한다.

  • gdb -q -tui [program]: -q (quiet) 옵션을 추가하여 GDB 시작 시 출력되는 버전 및 저작권 메시지(Banner)를 생략한다.

2) 화면 관리 및 유틸리티

  • 화면 깨짐 해결 (Refresh): printf 등으로 출력된 값 때문에 TUI 화면이 깨질 경우 사용한다. (단, refresh 하면 printf로 화면에 출력된 값이 지워지기 때문에 변수의 값을 화면에 계속 띄워놓고 추적하려면 display [변수] 명령어를 사용하는 것을 추천)
    • 명령어: refresh
    • 단축키: Ctrl + L
  • TUI 모드 전환: GDB 실행 도중 모드를 켜거나 끌 수 있다.
    • tui enable (tu e) : TUI 모드 활성화.
    • tui disable (tu d) : TUI 모드 비활성화 (기본 CLI 모드로 복귀).
    • help tui: TUI 관련 도움말 확인.

3) TUI 레이아웃(Layout) 제어

TUI 모드는 화면을 분할해서 사용할 수 있는 것이 최대 장점이다.

layout 명령어를 통해 원하는 정보를 선택해서 볼 수 있다.

명령어 약어 설명
help layout - 레이아웃 관련 도움말 출력
layout src la sr 소스 코드 창을 화면에 표시
layout asm la as 어셈블리 코드 창을 화면에 표시
layout regs (reg) la re 레지스터 창을 추가 (보통 소스/어셈블리와 함께 표시)
layout split la sp 소스와 어셈블리 창을 동시에 표시

4) 윈도우 포커스(Focus) 이동

TUI 모드에서 방향키를 누르면 기본적으로 소스 창이 스크롤된다.

이전 명령어를 찾기 위해 명령창을 스크롤하고 싶다면 포커스(Focus)를 변경해야 한다.

  • help focus: 포커스 관련 도움말 출력
  • 창 지정 이동:
    • focus src: 소스 창으로 포커스 이동
    • focus asm: 어셈블리 창으로 포커스 이동
    • focus regs: 레지스터 창으로 포커스 이동
    • focus cmd: 명령창(Command)으로 포커스 이동

  • 순차 이동:
    • focus next / fs n: 다음 창으로 포커스 이동
    • focus prev / fs p: 이전 창으로 포커스 이동

5) 창 크기 조절 (winheight)

특정 창(src/asm/reg/cmd)의 내용을 더 많이 보고 싶을 때 크기를 동적으로 조절할 수 있다.

  • 절대 크기 지정: winheight [창이름] [라인수]
    • 예: winheight src 20 (소스 창을 20라인 크기로 설정)
  • 상대 크기 조절:
    • winheight [창이름] +[n]: 창 크기를 n라인만큼 늘림
    • winheight [창이름] -[n]: 창 크기를 n라인만큼 줄임