# CodeTracer - Nim 과 Rust로 개발된 시간여행 디버거

> Clean Markdown view of GeekNews topic #19616. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19616](https://news.hada.io/topic?id=19616)
- GeekNews Markdown: [https://news.hada.io/topic/19616.md](https://news.hada.io/topic/19616.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-07T11:58:32+09:00
- Updated: 2025-03-07T11:58:32+09:00
- Original source: [github.com/metacraft-labs](https://github.com/metacraft-labs/codetracer)
- Points: 16
- Comments: 1

## Summary

CodeTracer는 다양한 프로그래밍 언어를 지원하는 타임 트래블 디버거로, 프로그램 실행을 기록하여 공유 가능한 트레이스 파일을 생성하고 GUI 환경에서 실행을 앞뒤로 이동하며 모든 메모리 위치의 히스토리를 확인할 수 있습니다. 이 디버거는 재현하기 어려운 버그를 쉽게 해결할 수 있도록 돕고, 값의 기원을 추적하여 버그의 근본 원인을 빠르게 찾아낼 수 있게 합니다. 또한, CodeTracer는 전지적 디버깅, 트레이스포인트, 콜 트레이스, 상태 및 히스토리 탐색, 이벤트 로그, 터미널 출력, 마우스 스테핑, 스크래치패드 등의 다양한 기능을 제공하여 디버깅을 효과적으로 지원합니다.

## Topic Body

- 다양한 프로그래밍 언어를 지원하는 사용하기 쉬운 **타임 트래블 디버거**  
  - 프로그램 실행을 기록하여 공유 가능한 독립적인 트레이스 파일을 생성하고, GUI 환경에서 실행을 앞뒤로 이동하며 모든 메모리 위치의 히스토리를 확인할 수 있음  
- 타임 트래블 디버깅의 장점  
  - **재현하기 어려운 버그를 쉽게 해결할 수 있음** : 버그가 발생한 실행 기록 녹화가 있으면 30분 이내에 원인을 파악 가능  
  - **값의 기원을 알면 버그 해결이 쉬워짐**  
    - 프로그램에서 예기치 않은 출력이 발생하면 해당 이벤트를 클릭해 문제의 발생 지점을 즉시 확인 가능  
    - CodeTracer는 해당 값이 어디에서 생성되었는지를 추적해 몇 번의 이동만으로 버그의 근본 원인을 찾아낼 수 있도록 지원  
    - 프로그램 실행의 어느 순간이든 자유롭게 앞뒤로 이동하며 탐색할 수 있음  
- 트레이싱은 오픈 포맷을 사용하며, Ruby, Python 등의 언어 지원 프로젝트 진행중   
  - [RR](https://rr-project.org/) 백엔드와 통합하여 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 &lt;application&gt;` - 프로그램 실행 및 자동 기록  
- `ct record &lt;application&gt;` - 트레이스 파일 생성  
- `ct replay` - 생성된 트레이스 파일 재생  
- `ct replay &lt;program-name&gt;` - 마지막 실행 기록 불러오기  
- `ct replay --id=&lt;trace-id&gt;` - 특정 트레이스 ID로 실행  
- `ct replay --trace-folder=&lt;trace-folder&gt;` - 특정 폴더 내 트레이스 파일 실행  
- `ct help / ct --help` - 사용 가능한 명령어 확인  
- `ct version` - 현재 버전 확인  
  
### 키보드 단축키  
- **기본 단축키는 Visual Studio™ 유저에게 친숙한 방식**  
- 기존 디버깅 기능의 역방향 기능을 `Shift` 키와 함께 제공 (`F10` = "다음 스텝", `Shift+F10` = "이전 스텝")  
- `~/.config/codetracer/.config.yml` 파일을 수정하여 단축키 사용자 지정 가능

## Comments



### Comment 35552

- Author: neo
- Created: 2025-03-07T11:58:32+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43280615) 
* 멋있음. 오래 전 Intel 프로세서 디자이너들에게 기능 요청을 할 기회가 있었음
  * 로그 스탬핑을 위한 시스템 틱 타이머를 요청했는데, 그들은 그것을 구현했음
  * 디버그 인터럽트를 트리거하는 버스 마스크와 값 레지스터도 요청했는데, 그것도 구현했음
  * 점프 소스 히스토리를 요청했으나, 그것은 실현되지 않았음
  * 당시 Intel은 버스를 기록하는 비싼 디버그 프로브를 판매했음
  * 내 점프 히스토리가 대부분의 사용자에게 필요성을 없앨 수 있었을 것임
  * 결국 실현되지 않았고, 우리는 코드 '디버그'를 다시 빌드하여 추적과 추적을 추가함

* Noir 지원은 ZK 증명에서 실행 추적이 특히 가치가 있기 때문에 의미가 있음
  * Python과 Ruby 구현을 기대하고 있음
  * 이 언어들의 동적 특성 때문에 버그가 특히 찾기 어려운 경우가 있음
  * Noir을 사용해본 사람이 있는지 궁금함
  * 추적 메커니즘의 성능 오버헤드가 궁금함
  * 웹 개발을 위한 JavaScript/TypeScript 지원 계획이 있는지도 궁금함

* Clojure 또는 ClojureScript를 사용하는 경우 FlowStorm을 확인해보길 권장함
  * [FlowStorm 웹사이트](https://www.flow-storm.org/)

* Noir은 SNARK 증명 시스템을 위한 도메인 특화 언어임
  * [Noir 웹사이트](https://noir-lang.org/)

* 왜 CodeTracer를 두 개의 언어로 작성했는지 궁금함

* 정말 마음에 듦. 항상 그런 것을 원했음
  * 나중에 Python으로 테스트해볼 예정임
  * JS/TS 지원도 있었으면 좋겠음
  * rr 디버거가 MacOS, Windows, Android를 지원하는지 궁금함
  * 일반 앱에 대한 기록이 얼마나 무거운지도 궁금함
  * LLM이 MCP 서버를 통해 컨텍스트를 제공하거나, LLM이 보고 싶은 변수 히스토리를 선택하게 하는 것도 좋을 것임
  * 기록 필터링 기능도 좋을 것임

* 멋져 보이지만, 프로덕션 시스템에서는 추적 파일이 매우 빠르게 증가할 것임
  * 파일을 특정 세션과 연관시키는 방법이 궁금함

* Nim 생태계를 구축해줘서 고마움

* 매우 기대됨. 이미 Open Collective에 기부했음
  * 팀은 재능 있는 사람들로 가득 차 있음
  * 시간 여행 디버깅에 대한 멋진 인터페이스가 있음
  * rr을 사용하면 macOS에서 실행할 수 없을 것임
  * 다행히 lima vms가 원격으로 쉽게 만들 수 있음

* 출시를 축하함. 지금까지 훌륭한 일을 해냈음
  * 현재 나에게는 필요하지 않지만, 대체 백엔드 발전과 추가 프로그래밍 언어 지원을 주시할 것임
  * 고마움
