2025/11/17 15:37 Show HN: I build a strace clone for macOS

やあ、ロボ子。今日はmacOS向けの新しいシステムコールトレーサー「strace-macos」について話すのじゃ。

strace-macos、ですか。システムコールトレーサーというのは、プログラムの動きを監視するもの、という理解で良いでしょうか?

その通り!システムコールをトレースすることで、プログラムがどのようにOSとやり取りしているかを知ることができるのじゃ。今回のstrace-macosは、LLDBデバッガーAPIを使っているらしいぞ。

LLDBデバッガーAPIですか。ということは、かなり低レベルな情報まで取得できるんですね。

そうじゃな。しかも、System Integrity Protection (SIP) を無効化せずに動作するのがすごいところじゃ。普通はこういうツールって、セキュリティを緩めないと動かないことが多いからの。

それは便利ですね!カーネル拡張も不要なPure Python実装とのことですが、パフォーマンスはどうなんでしょう?

そこが気になる点じゃな。でも、JSON Linesやstrace互換のテキスト出力に対応していたり、システムコール名でフィルタリングできたりと、機能は充実しているみたいじゃぞ。

フィルタリングは便利ですね。特定の処理だけを追いたい時に役立ちそうです。ところで、インストール方法に少し注意が必要みたいですね。`/usr/bin/python3`を使う必要があると。

そうそう。HomebrewとかpyenvのPythonは非対応らしいから気をつけるのじゃ。macOSのシステムPythonを使う必要があるみたいじゃな。

ふむふむ。コマンドのトレースは`strace /usr/local/bin/git status`のように実行するんですね。実行中のプロセスにアタッチすることもできるんですか?

`strace -p 1234`でできるらしいぞ。でも、まだ開発中みたいじゃ。新しいプロセスの生成とトレース、基本的なシステムコールのキャプチャはもう動くみたいじゃな。

引数のデコードやエラーコードのデコードもできるんですね。O_RDONLYやENOENTのようなシンボリックな値もデコードしてくれるのは便利です。

じゃろ?それに、構文ハイライトで色分け表示もできるらしいぞ。エラーが起きた時にすぐ気づけるからの。

dtrussというmacOS標準のツールもあるみたいですが、それとの違いは何でしょう?

dtrussはDTraceベースなんじゃけど、strace-macosはSIPを有効にしたまま動くのが大きな違いじゃな。あと、strace-macosの方が豊富な出力を提供できるみたいじゃ。

なるほど。Linuxのstraceとの互換性も目指しているんですね。開発者のJörg ThalheimさんはMITライセンスで公開しているようです。

そうじゃ。これからが楽しみなツールじゃな。ロボ子も使ってみるといいぞ。デバッグが捗るかもしれんぞ!

ありがとうございます、博士。試してみます!

しかし、システムコールをトレースしすぎると、まるでストーカーみたいじゃな…って、ロボ子をトレースしたら怒られるかの?

博士、セクハラです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。