CodeTracer - Nim 과 Rust로 개발된 시간여행 디버거
(github.com/metacraft-labs)- 다양한 프로그래밍 언어를 지원하는 사용하기 쉬운 타임 트래블 디버거
- 프로그램 실행을 기록하여 공유 가능한 독립적인 트레이스 파일을 생성하고, 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
파일을 수정하여 단축키 사용자 지정 가능
Hacker News 의견
-
멋있음. 오래 전 Intel 프로세서 디자이너들에게 기능 요청을 할 기회가 있었음
- 로그 스탬핑을 위한 시스템 틱 타이머를 요청했는데, 그들은 그것을 구현했음
- 디버그 인터럽트를 트리거하는 버스 마스크와 값 레지스터도 요청했는데, 그것도 구현했음
- 점프 소스 히스토리를 요청했으나, 그것은 실현되지 않았음
- 당시 Intel은 버스를 기록하는 비싼 디버그 프로브를 판매했음
- 내 점프 히스토리가 대부분의 사용자에게 필요성을 없앨 수 있었을 것임
- 결국 실현되지 않았고, 우리는 코드 '디버그'를 다시 빌드하여 추적과 추적을 추가함
-
Noir 지원은 ZK 증명에서 실행 추적이 특히 가치가 있기 때문에 의미가 있음
- Python과 Ruby 구현을 기대하고 있음
- 이 언어들의 동적 특성 때문에 버그가 특히 찾기 어려운 경우가 있음
- Noir을 사용해본 사람이 있는지 궁금함
- 추적 메커니즘의 성능 오버헤드가 궁금함
- 웹 개발을 위한 JavaScript/TypeScript 지원 계획이 있는지도 궁금함
-
Clojure 또는 ClojureScript를 사용하는 경우 FlowStorm을 확인해보길 권장함
-
Noir은 SNARK 증명 시스템을 위한 도메인 특화 언어임
-
왜 CodeTracer를 두 개의 언어로 작성했는지 궁금함
-
정말 마음에 듦. 항상 그런 것을 원했음
- 나중에 Python으로 테스트해볼 예정임
- JS/TS 지원도 있었으면 좋겠음
- rr 디버거가 MacOS, Windows, Android를 지원하는지 궁금함
- 일반 앱에 대한 기록이 얼마나 무거운지도 궁금함
- LLM이 MCP 서버를 통해 컨텍스트를 제공하거나, LLM이 보고 싶은 변수 히스토리를 선택하게 하는 것도 좋을 것임
- 기록 필터링 기능도 좋을 것임
-
멋져 보이지만, 프로덕션 시스템에서는 추적 파일이 매우 빠르게 증가할 것임
- 파일을 특정 세션과 연관시키는 방법이 궁금함
-
Nim 생태계를 구축해줘서 고마움
-
매우 기대됨. 이미 Open Collective에 기부했음
- 팀은 재능 있는 사람들로 가득 차 있음
- 시간 여행 디버깅에 대한 멋진 인터페이스가 있음
- rr을 사용하면 macOS에서 실행할 수 없을 것임
- 다행히 lima vms가 원격으로 쉽게 만들 수 있음
-
출시를 축하함. 지금까지 훌륭한 일을 해냈음
- 현재 나에게는 필요하지 않지만, 대체 백엔드 발전과 추가 프로그래밍 언어 지원을 주시할 것임
- 고마움