EpicGames/raddebugger — A native, user-mode, multi-process, graphical debugger.
RAD Debugger — 네이티브 멀티프로세스 디버거와 고속 링커
Epic Games의 RAD Debugger는 Windows x64에서 PDB를 읽어 로컬 프로세스를 디버깅하는 알파 단계 도구입니다. 자체 디버그 정보 형식 RDI와 대형 실행 파일에 맞춘 RAD Linker도 함께 개발하며, 거대한 프로젝트의 링크 시간을 테스트에서 50% 줄였다고 보고합니다.
- 주제
AI 요약
RAD Debugger는 네이티브 사용자 모드 디버거로, 여러 프로세스를 다루는 그래픽 인터페이스를 제공합니다. 현재 디버깅 대상은 로컬 Windows x64이며 디버그 정보 형식은 PDB입니다. 프로젝트는 알파 단계로, 우선 Windows 환경의 x64 디버깅 기능을 안정화하는 데 집중합니다. 디버그 정보 변환과 로딩, 프로세스 제어, 스텝 실행, 식 평가, 프런트엔드 신뢰성이 우선 과제입니다.
디버그 정보 형식 RDI
RAD Debug Info(RDI)는 디버거가 사용하는 자체 디버그 정보 형식입니다. 기존 도구 체인이 만드는 PDB를 필요할 때 RDI로 변환하며, Linux 지원 단계에서는 DWARF 변환도 계획합니다. RDI의 형식 정의와 파서 코드는 독립 라이브러리인 lib_rdi에 있으며, 데이터를 구성하고 직렬화하는 lib_rdi_make도 개발 중입니다. radbin 명령줄 도구는 네이티브 디버그 정보를 RDI로 변환하고, RDI 파일 내용을 텍스트로 출력합니다.
대형 프로젝트를 위한 RAD Linker
RAD Linker는 x64 PE/COFF 실행 파일을 만드는 링커입니다. 특히 디버그 정보가 매우 큰 프로젝트를 겨냥합니다. 테스트에서 디버그 정보가 여러 기가바이트에 이르는 경우 링크 시간이 50% 빨라졌다고 프로젝트는 설명합니다. MSVC와 호환되는 명령줄 옵션을 지원하며, 표준 PDB를 생성하거나 RDI를 직접 만들 수 있습니다. RDI를 직접 생성하면 디버깅 전에 변환하는 시간을 없애고, 내부 32비트 테이블이 넘쳐 손상되는 대형 PDB 문제도 피하는 데 도움이 됩니다.
기본 설정은 CPU 코어 수만큼 작업 스레드를 실행합니다. /rad_workers 옵션으로 스레드 수를 제한할 수 있습니다. 대용량 페이지를 요청하는 /rad_large_pages 옵션을 켜면 링크 시간이 추가로 25% 줄지만 기본값은 꺼져 있습니다. Windows의 대용량 페이지 지원이 불안정해 메모리 단편화가 빠르게 진행될 수 있고, 일반 환경에서는 재부팅이 필요할 수 있기 때문입니다. 프로젝트는 환경을 초기화하는 Docker나 가상 머신에서 사용하길 권합니다. 링커의 주요 용도는 대형 프로젝트의 컴파일과 디버깅 반복 주기이며, 링크 타임 최적화(LTO)는 아직 지원하지 않습니다. 데드 코드 제거와 Clang 기반 LTO를 향후 기능으로 제시합니다.
Linux 포팅 계획과 코드 구조
프로젝트는 Windows x64와 Linux x64 개발 환경에서 작업하지만, 디버거 자체의 Linux 지원은 앞으로 진행할 단계입니다. Linux 포팅에는 로컬 프로세스 제어를 맡는 demon 계층, x64 ELF 스택 언와인더, DWARF-to-RDI 변환기, 렌더링 백엔드, FreeType 기반 글꼴 처리, 운영체제 추상화 계층이 필요합니다. Windows에서는 D3D11과 DirectWrite를 사용합니다. RAD Linker의 Linux 포팅도 진행 중이며 대용량 페이지 지원을 안정적으로 제공하는 것이 목표입니다.
코드는 기능별 계층으로 나뉘며 계층 간 의존성은 방향성 비순환 그래프(DAG)를 이룹니다. 프로세스 제어, 디버그 정보 처리, 식 평가, 시각화, 파일 캐시, 렌더링 등이 별도 계층을 구성합니다. lib_rdi처럼 다른 프로젝트에 독립적으로 가져갈 수 있는 라이브러리도 있습니다. Windows에서는 MSVC 또는 Clang으로, Linux에서는 GCC 또는 Clang으로 빌드할 수 있으며, 빌드 스크립트에 release, radlink, radbin 인수를 지정해 릴리스 빌드나 관련 도구를 만들 수 있습니다.
원문: GitHub / 번역·요약: Trawling