【エストレース】

strace とは?

最終更新:
💡 プログラムとOSのやり取りを、記録して調べる

Linuxのプロセスが行うシステムコールや受け取るシグナルを追跡するツール。呼び出しの引数や結果から、ファイルが見つからないなどの原因を調べられます。

📌 このページのポイント
プログラムとOSのやり取りを記録プログラム追跡する対象OSへ依頼カーネルファイルなどを扱うstrace引数と結果を記録例:ENOENT対象が見つからない失敗した行が、必ず不具合とは限らないアプリの全計算を表示する道具ではない
システムコールの引数や返り値を調べるイメージ。追跡による動作への影響とログの内容を確認して使います。
ひよこ ひよこ
straceで、プログラムの中が全部見えるの?
ペンギン先生 ペンギン先生
主に見えるのは、OSへ頼むシステムコールや受け取るシグナルだよ。ファイルを開くときのパスや返り値などから調べられる。アプリの内部計算がすべて表示される、という道具ではないんだ。
ひよこ ひよこ
最初は、どう試すの?
ペンギン先生 ペンギン先生
例えばLinuxで strace -e trace=%file cat /etc/hosts と実行すると、ファイルに関係するシステムコールに絞って追跡できるよ。返り値が-1なら、続くエラー名も見る。ENOENTは対象が見つからないことを表すけど、失敗した行すべてがアプリの不具合とは限らないんだ。
ひよこ ひよこ
起動済みのものにも使える?
ペンギン先生 ペンギン先生
strace -p PID で接続できる場合があるよ。ただしOSの権限や制限に従う。追跡中は動作が遅くなったり影響が出たりするので、特に稼働中のサービスでは、対象と方法を決めてから使おう。
ひよこ ひよこ
時間も測れるの?
ペンギン先生 ペンギン先生
-cでシステムコールごとの回数・エラー・時間の統計をまとめられる。既定の時間はカーネル内のCPU時間で、アプリ全体の経過時間とは別だよ。出力にはパスや引数、読み書きした内容が含まれることもあるので、ログを共有する前に中身を確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「strace」って出てきたら「LinuxでプログラムとOSのやり取りを追跡するツール」と思えばだいたいOK!
📖 おまけ:英語の意味
「strace」 = Linuxのシステムコール追跡ツール
💬 システムコールやシグナルを追跡する道具の名前です。アプリのソースコードを変更せずに、プロセスとカーネルの境界で何が起きるかを調べます。

参考資料

← 用語集にもどる