1 ポイント 投稿者 GN⁺ 2024-11-28 | 1件のコメント | WhatsAppで共有
  • C-Reduceの活用

    • C-Reduceは、Regehrとその同僚たちが開発したツールで、Cコンパイラのバグ再現ケースを最小化するために使われる。
    • たとえば、Clangのバグを引き起こす10,000行のCファイルを縮小したいときに有用である。
    • C-ReduceはC言語だけに限定されず、さまざまな言語に適用できる。
  • C-Reduceの要件

    • 決定論的な条件が必要。
    • 高速な再現ケースがあると、縮小の速度向上に役立つ。
    • C-Reduceが縮小できる、変更可能なソースファイルが1つ以上必要。
  • RustPythonのバグ事例

    • RustPythonで発生したバグを報告するために、スクリプト interesting.sh を作成。
    • スクリプトはRustPython実行後、特定のエラーメッセージを grep で探す。
  • C-Reduceの実行

    • C-Reduceを実行し、ファイルサイズを50%以上縮小することに成功。
    • --not-c オプションを使ってCに特化したパスを避け、Python向けに最適化した。
    • 結果として、迅速かつ簡単にファイルを縮小できた。
  • 結論

    • C-Reduceはさまざまな言語に適用可能で、ファイルを高速かつ効率的に縮小するのに有用である。
    • オープンソースのブログであり、誤りがあれば変更提案が可能。

1件のコメント

 
GN⁺ 2024-11-28
Hacker Newsのコメント
  • あるユーザーはファイルを縮小する方法を共有し、RustPython と scrapscript を使ったセットアップ方法を説明している

    • git clone コマンドを使って RustPython と scrapscript をクローンし、cargo build --release でビルドする
    • interesting.sh ファイルをダウンロードして実行権限を付与する
    • nix run nixpkgs#creduce コマンドを使ってファイルを縮小する
  • C-Reduce の使用を勧めており、Shrinkray というツールもあわせて試すことを推奨している

    • Shrinkray はフォーマット非依存で、C-Reduce がうまく動かない場合でも役立つ
  • C-Reduce に関する論文が 2012 年に発表されたことに言及している

    • John Regehr らの論文を通じて C-Reduce の動作方式を説明している
  • C-Reduce を初めて知り、git bisect を初めて見つけたときと同じような面白さを感じたという

    • 後で必要になったときに使えるよう覚えておくことにした
  • C-Reduce の例を示す記事を見つけたが、各反復で何を削除するかをどう決めているのか理解しにくいという声がある

    • トークン化の過程があるのではないかと推測しているが、プログラミング言語ごとにどう機能するのか理解しづらい
  • C-Reduce は非常に有用だと評価されている

    • CSmith を使ってランダムなテストプログラムを生成し、クラッシュ時には自動で C-Reduce を使って問題を縮小する
  • デルタデバッグは新しい概念ではない

    • 「delta」というデルタデバッグ実装は 19 年以上前からあり、オープンソースとして公開されている
    • LLVM の紹介では標準的なデルタデバッグツールとして言及されている
  • SQL でもよく動作し、職場で使っているという

    • SQLancer を通じて知ったとのこと
  • C 言語以外でも動作する理由の説明がなければ信じがたいという意見がある

    • LLM を使っていないため、なおさら混乱するという
  • C-Reduce の優れた後継ツールとして cvise を勧める声もある

    • アセンブリプログラムを最小限の集合に縮小するために何度も使っており、とても有用なプログラムだという