- 다양한 프로그래밍 언어를 지원하는 사용하기 쉬운 타임 트래블 디버거
- 프로그램 실행을 기록하여 공유 가능한 독립적인 트레이스 파일을 생성하고, GUI 환경에서 실행을 앞뒤로 이동하며 모든 메모리 위치의 히스토리를 확인할 수 있음
- 타임 트래블 디버깅의 장점
-
재현하기 어려운 버그를 쉽게 해결할 수 있음 : 버그가 발생한 실행 기록 녹화가 있으면 30분 이내에 원인을 파악 가능
-
값의 기원을 알면 버그 해결이 쉬워짐
- 프로그램에서 예기치 않은 출력이 발생하면 해당 이벤트를 클릭해 문제의 발생 지점을 즉시 확인 가능
- CodeTracer는 해당 값이 어디에서 생성되었는지를 추적해 몇 번의 이동만으로 버그의 근본 원인을 찾아낼 수 있도록 지원
- 프로그램 실행의 어느 순간이든 자유롭게 앞뒤로 이동하며 탐색할 수 있음
- 트레이싱은 오픈 포맷을 사용하며, Ruby, Python 등의 언어 지원 프로젝트 진행중
-
RR 백엔드와 통합하여 C/C++, Rust, Nim, D, Zig, Go, Fortran, FreePascal 등 시스템 프로그래밍 언어 디버깅 지원 계획
CodeTracer의 주요 기능
전지적 디버깅 (Omniscience)
- 실행 중 특정 코드 줄에서 과거와 미래의 변수 값을 즉시 확인 가능
- 루프 내 변수 값의 변화를 쉽게 탐색 가능
- 실행된 코드와 실행되지 않은 코드가 명확하게 구분됨
트레이스포인트 (Tracepoints)
- 추가적인 코드 실행 없이 프로그램 내 변수 값의 변화를 즉시 확인 가능
- 조건문, 함수 호출, 데이터 출력 등을 손쉽게 추가하여 디버깅 가능
콜 트레이스 (Call Trace)
- 단순한 스택 트레이스가 아니라 프로그램 실행 전체의 함수 호출 트리를 제공
- 필터링 및 정렬을 통해 쉽게 탐색 가능
상태 및 히스토리 탐색 (State and History Explorer)
- 모든 변수의 값 변경 내역을 추적 가능
- 변수의 값이 변경된 코드 지점으로 즉시 이동 가능
- 복사된 변수의 원본 값을 자동 추적하여 버그 분석을 용이하게 함
이벤트 로그 (Event Log)
- 프로그램 내 중요한 이벤트를 시간순으로 정리하여 제공
- 특정 이벤트를 클릭하면 해당 순간의 코드로 즉시 이동 가능
터미널 출력 (Terminal Output)
-
stdout, stderr 출력을 터미널처럼 재현하여 기록된 프로그램 출력을 확인 가능
- 클릭하면 출력이 발생한 정확한 코드 위치로 이동 가능
마우스 스테핑 (Mouse Stepping)
- 마우스를 사용해 코드의 특정 부분으로 즉시 이동 가능
-
라인 이동: 마우스 가운데 클릭 (Ctrl+클릭 가능)
-
함수 진입: 함수 호출을 더블 클릭하여 내부로 이동 (Ctrl+Alt+클릭 가능)
-
추가 옵션: 우클릭 메뉴에서 추가 기능 탐색 가능
스크래치패드 (Scratchpad)
- 특정 시점의 변수 값을 고정하여 비교 및 분석 가능
- 코드 실행 흐름을 시각적으로 비교하며 문제를 분석 가능
CodeTracer CLI 명령어
-
ct run <application> - 프로그램 실행 및 자동 기록
-
ct record <application> - 트레이스 파일 생성
-
ct replay - 생성된 트레이스 파일 재생
-
ct replay <program-name> - 마지막 실행 기록 불러오기
-
ct replay --id=<trace-id> - 특정 트레이스 ID로 실행
-
ct replay --trace-folder=<trace-folder> - 특정 폴더 내 트레이스 파일 실행
-
ct help / ct --help - 사용 가능한 명령어 확인
-
ct version - 현재 버전 확인
키보드 단축키
-
기본 단축키는 Visual Studio™ 유저에게 친숙한 방식
- 기존 디버깅 기능의 역방향 기능을 Shift 키와 함께 제공 (F10 = "다음 스텝", Shift+F10 = "이전 스텝")
-
~/.config/codetracer/.config.yml 파일을 수정하여 단축키 사용자 지정 가능