소프트웨어 엔지니어를 위한 최고의 리눅스 디버거 8가지

Charset=invalidcharsetid 48

디버거는 프로그램에서 버그를 찾는 데 필수적입니다. 디버거는 코드 컴파일 전에 문제를 찾으려고 시도하여 보통 컴파일러보다 더 많은 정보를 제공합니다. 리눅스는 주로 오픈 소스 생태계로, 여러 언어와 처리 아키텍처에서 작동하는 이러한 종류의 애플리케이션이 풍부합니다. 이 가이드에서는 리눅스 디버거의 세계로 바로 들어가보겠습니다.

목차

    1. GNU 디버거(GDB)
    1. 데이터 디스플레이 디버거(DDD)
    1. LLDB
    1. 델브(Delve)
    1. Xdebug
    1. KDbg
    1. Valgrind
    1. strace

1. GNU 디버거(GDB)

GNU 디버거, 즉 GDB는 현대 프로그래머에게 제공되는 가장 강력한 리눅스 디버거 중 하나입니다. GDB는 방대한 기능 세트를 가지고 있는 강력한 도구입니다. GDB는 C, C++, Go, Rust와 같은 많은 인기 프로그래밍 언어를 지원합니다. x86, x86-64, ARM, PowerPC, SPARC 및 MIPS와 같은 다양한 CPU 아키텍처에서도 작동합니다.

GDB가 테스트 프로그램을 실행하는 시연

다음 명령을 사용하여 GDB를 설치하십시오:

우분투/데비안 기반 배포판에서:

sudo apt install gdb

페도라/RHEL 배포판에서:

sudo dnf install gdb

아치 기반 배포판에서:

sudo pacman -S gdb

GCC로 디버그 심볼을 사용하여 컴파일하는 한, 프로그램이 실행되는 동안 s를 입력하여 프로그램의 명령을 단계적으로 실행할 수 있습니다. r을 입력하면 디버거를 통해 프로그램이 실행됩니다. 프로그램이 로드된 상태에서 GDB를 시작하려면 터미널에 gdb와 프로그램 경로를 입력하면 됩니다.

입장하면 help를 입력하면 이 강력한 디버거로 할 수 있는 모든 기능을 설명하는 잘 정리된 목록을 볼 수 있습니다!

2. 데이터 디스플레이 디버거(DDD)

명령어 다루는 것이 귀찮지만 GDB의 기능을 여전히 사랑하는 경우, DDD는 모든 기능을 포인트 앤 클릭 인터페이스에서 제공하는 간단한 그래픽 프론트 엔드를 제공합니다. 이것은 전형적인 리눅스 디버거 GUI입니다.

DDD가 간단한 프로그램을 실행하고 종료하는 모습

UI는 약간 단순해 보일 수 있지만, 다른 어떤 디버거와 마찬가지로 강력함을 지니고 있습니다. 여기서의 차이점은 GNU의 시그니처 디버거에 그래픽 인터페이스가 추가되었다는 것입니다!

설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install ddd

페도라/RHEL 배포판에서:

sudo dnf install ddd

아치 기반 배포판에서:

yay -S ddd

모든 아치 기반 시스템에서는 AUR 헬퍼를 사용해야 하며, DDD는 공식 리포지토리에 존재하지 않습니다. 또는 AUR 헬퍼 없이 아치 기반 시스템에 DDD를 설치할 수 있습니다:

sudo pacman -S --needed base-devel  
git clone https://aur.archlinux.org/ddd.git  
cd ddd  
makepkg -si

3. LLDB

LLDB는 LLVM 프로젝트의 일부입니다. LLVM 스위트는 효율적인 작업 흐름 덕분에 인기를 얻고 있습니다. 또한 macOS의 Xcode와 Android Studio의 기본 디버거로 자리 잡았습니다. LLDB의 주요 특징 중 일부는 다양한 컴파일러 통합 및 원격 디버깅 지원입니다. C 언어(C, C++, Objective-C)를 지원합니다.

리눅스 디버거 LLDB

기본 GDB 명령어에 익숙한 사람에게 LLDB는 친숙할 것입니다. run 또는 r를 입력하면 프로그램이 실행되고, step 또는 s를 입력하면 서브루틴을 단계적으로 실행합니다.

설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install lldb

페도라/RHEL 배포판에서:

sudo dnf install lldb

아치 기반 배포판에서:

sudo pacman -S lldb

4. 델브(Delve)

델브는 구글의 Go 프로그래밍 언어를 위한 간단하면서도 기능이 풍부한 리눅스 디버거입니다. 실행 시간에 프로그램과 상호 작용하고 고루틴 및 스택과 같은 것을 조작할 수 있습니다. 디버거 자체가 Go로 작성되어, 테스트할 프로그램과 같은 환경에서 실행됩니다.

델브는 GDB와 LLDB와 같은 원리로 작동하지만, 다른 두 디버거와 크게 다른 고유한 명령 세트를 가지고 있습니다. 입장 후 help를 입력하면 제공되는 모든 디버그 옵션의 전체 목록을 확인할 수 있습니다.

보다 일반적인 여러 언어를 위한 디버거와 달리, 델브는 실행 중인 애플리케이션을 더 세부적으로 탐색할 수 있는 Go 전용 명령어를 더 많이 제공합니다.

델브를 사용하여 특정 Go 루틴과 스레드를 살펴보는 모습

설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install delve

페도라/RHEL 배포판에서:

sudo dnf install delve

아치 기반 배포판에서:

sudo pacman -S delve

5. Xdebug

대부분의 사람들은 특정 코드 문제를 파악하기 위해 변수 덤프(이를 PHP 커뮤니티에서는 “dump & die”라고 부름)를 배웁니다. 그러나 모든 루틴을 한 번에 살펴볼 수 있는 더 강력한 기능이 필요할 때가 있습니다. Xdebug는 예비 및 숙련된 PHP 프로그래머에게 이를 다채롭게 제공합니다.

Xdebug는 PHP 코드를 한 줄씩 단계적으로 실행하며 웹 페이지가 처리될 때 무슨 일이 일어나고 있는지를 정확하게 보여줍니다. Xdebug는 VSCode를 포함한 여러 IDE에서도 작동합니다. 다른 기능으로는 강력한 프로파일러, 스택 추적기 및 전체 실행 세그먼트를 덤프하는 기능이 포함되어 있습니다.

Xdebug를 설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install php-xdebug

페도라/RHEL 배포판에서:

sudo dnf install php-xdebug

아치 기반 배포판에서:

sudo pacman -S xdebug

6. KDbg

KDbg는 KDE 데스크탑 환경을 위한 GUI 디버거입니다. DDD와 마찬가지로 GDB 프론트 엔드로 실행되므로 GDB의 모든 기능을 직관적인 사용자 인터페이스와 함께 제공합니다. 더 노련한 프로그래머는 코드 단계를 수행하면서 모든 변수를 명확하게 볼 수 있는 기회를 높이 평가할 것이며, 각 CPU 레지스터가 무엇을 가지고 있는지를 보여주는 전담 패널을 완전히 제공합니다. 다른 디버거에서는 이 시각화를 쉽게 할 수 없습니다.

이런 이유로 KDbg는 전통적인 네이티브 애플리케이션 프로그래머에게 훌륭한 선택입니다. 이제 막 배우기 시작한 초보자부터 가장 숙련된 베테랑까지 모두에게 적합합니다.

KDbg가 C로 작성된 실행 프로그램을 디버깅하는 모습

KDbg를 설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install kdbg

페도라/RHEL 배포판에서:

sudo dnf install kdbg

아치 기반 배포판에서:

sudo pacman -S kdbg

참고: 우분투 또는 데비안 기반 배포판을 사용 중이고 공식 리포지토리에서 kdbg 패키지를 찾지 못하면, 직접 빌드할 때 입력해야 하는 내용은 다음과 같습니다:

sudo apt install build-essential cmake extra-cmake-modules qtbase5-dev libkf5i18n-dev libkf5iconthemes-dev libkf5xmlgui-dev  
git clone -b maint https://github.com/j6t/kdbg.git  
cd kdbg  
cmake .  
make  
sudo make install

7. Valgrind

Valgrind는 강력한 메모리 디버거로, 소프트웨어 분석을 위한 다양한 추가 도구를 제공합니다. 리눅스와 맥에서 실행됩니다. 또한 프레임워크로 사용할 수 있으며 프로파일러와 같은 동적 분석 도구를 생성할 수 있습니다. 전반적으로 Valgrind는 프로그램이 실행되는 동안 메모리를 모니터링하는 다양한 도구와 풍부한 기능 세트 덕분에 전문가에게 훌륭한 선택입니다.

Valgrind가 프로그램에서 메모리 누수를 감지하는 모습

Valgrind를 설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install valgrind

페도라/RHEL 배포판에서:

sudo dnf install valgrind

아치 기반 배포판에서:

sudo pacman -S valgrind

8. strace

strace는 Unix의 사용자 공간 유틸리티로, 사용자가 시스템 호출과 신호를 터미널에서 직접 추적할 수 있게 해줍니다.

리눅스 디버거 Strace

프로그래머는 이를 사용하여 스택 트레이스를 덤프하고, 시스템 호출을 필터링하고, 반환 코드를 수정하고, 파일 설명자를 추출하는 등 여러 작업을 수행할 수 있습니다.

더 중요한 것은 strace가 실행 중인 프로그램에 첨부할 수 있게 해줍니다. 개별적으로 실행 중인 소프트웨어에 대해 더 깊이 파고들어 충돌의 원인을 더 잘 이해하는 데 도움이 됩니다.

strace를 설치하려면:

우분투/데비안 기반 배포판에서:

sudo apt install strace

페도라/RHEL 배포판에서:

sudo dnf install strace

아치 기반 배포판에서:

sudo pacman -S strace

무기가 당신을 기다린다

이 도구들을 통해 이제는 이전에는 접근하기 어려웠던 방법으로 코드를 점검하고 분석할 수 있습니다. 배우는 데 약간의 시간이 걸리더라도 그만한 가치가 있습니다. 리눅스에서 프로그래밍에 진지하다면 디버거를 사용하는 법을 배우는 것이 장기적으로 훨씬 더 많은 시간을 절약하게 해줄 것입니다.

최고의 리눅스 디버거를 확보했으므로 이제 개발자를 위한 최고의 리눅스 배포판을 찾아볼 시간입니다.

이미지 출처: 저자 제공.