- さまざまなプログラミング言語をサポートする、使いやすいタイムトラベルデバッガ
- プログラム実行を記録して共有可能な独立トレースファイルを生成し、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 ファイルを編集してショートカットをカスタマイズ可能
1件のコメント
Hacker Newsのコメント
すごい。ずっと昔に Intel のプロセッサ設計者に機能要望を出す機会があった
debugビルドしてトレース機能を追加することになったNoir のサポートは、ZK 証明では実行トレースが特に価値を持つので理にかなっている
Clojure または ClojureScript を使っているなら、FlowStorm を確認することを勧める
Noir は SNARK 証明システム向けのドメイン特化言語だ
なぜ CodeTracer を 2 つの言語で書いたのか気になる
とても気に入った。ずっとこういうものが欲しかった
すごく良さそうだが、本番環境のシステムではトレースファイルが非常に速く増えるだろう
Nim エコシステムを築いてくれてありがとう
とても楽しみだ。すでに Open Collective に寄付した
リリースおめでとう。ここまで素晴らしい仕事をしてきた