16 ポイント 投稿者 GN⁺ 2025-03-07 | 1件のコメント | WhatsAppで共有
  • さまざまなプログラミング言語をサポートする、使いやすいタイムトラベルデバッガ
    • プログラム実行を記録して共有可能な独立トレースファイルを生成し、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)

  • stdoutstderr 出力をターミナルのように再現して、記録されたプログラム出力を確認可能
  • クリックすると、出力が発生した正確なコード位置へ移動可能

マウスステッピング (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件のコメント

 
GN⁺ 2025-03-07
Hacker Newsのコメント
  • すごい。ずっと昔に Intel のプロセッサ設計者に機能要望を出す機会があった

    • ログのタイムスタンプ用にシステムティックタイマーを要望したところ、彼らはそれを実装した
    • デバッグ割り込みをトリガーするバスマスクと値レジスタも要望したが、それも実装された
    • ジャンプ元の履歴も要望したが、それは実現しなかった
    • 当時 Intel はバスを記録する高価なデバッグプローブを販売していた
    • 私の考えるジャンプ履歴があれば、大半のユーザーにはそれが不要になっていたかもしれない
    • 結局実現せず、私たちはコードを再び debug ビルドしてトレース機能を追加することになった
  • Noir のサポートは、ZK 証明では実行トレースが特に価値を持つので理にかなっている

    • Python や Ruby の実装も期待している
    • これらの言語は動的な性質のため、バグが特に見つけにくいことがある
    • Noir を使ったことがある人がいるのか気になる
    • トレース機構の性能オーバーヘッドも気になる
    • Web 開発向けの JavaScript/TypeScript サポートを計画しているのかも気になる
  • Clojure または ClojureScript を使っているなら、FlowStorm を確認することを勧める

  • Noir は SNARK 証明システム向けのドメイン特化言語だ

  • なぜ CodeTracer を 2 つの言語で書いたのか気になる

  • とても気に入った。ずっとこういうものが欲しかった

    • 後で Python で試してみるつもりだ
    • JS/TS サポートもあるといい
    • rr デバッガーが MacOS、Windows、Android をサポートしているのか気になる
    • 一般的なアプリの記録がどれくらい重いのかも気になる
    • LLM が MCP サーバー経由でコンテキストを提供したり、LLM に見たい変数履歴を選ばせたりできるのも良さそうだ
    • 記録フィルタリング機能もあるとよさそうだ
  • すごく良さそうだが、本番環境のシステムではトレースファイルが非常に速く増えるだろう

    • ファイルを特定のセッションと関連付ける方法が気になる
  • Nim エコシステムを築いてくれてありがとう

  • とても楽しみだ。すでに Open Collective に寄付した

    • チームには才能ある人たちがそろっている
    • タイムトラベルデバッグのすばらしいインターフェースがある
    • rr を使うと macOS では動かせないだろう
    • 幸い、lima VM はリモートで簡単に作れる
  • リリースおめでとう。ここまで素晴らしい仕事をしてきた

    • 今の自分には必要ないが、代替バックエンドの進展や追加のプログラミング言語サポートは注視していく
    • ありがとう