【エストレース】

strace とは?

💡 プログラムとOSの「会話」を盗み聞きする最強のデバッグツール
📌 このページのポイント
strace の仕組み アプリケーション (追跡対象) システムコール カーネル strace ptrace で追跡 strace の出力: open("/etc/hosts" ,O_RDONLY) = 3 read(3,"127.0.0 .1 local",4096) close(3) = 0 よく使うオプション -p PID: アタッチ -e trace=file -c: 統計表示 -f: 子も追跡
strace によるシステムコールの追跡
ひよこ ひよこ

straceって何に使うツールなの?

ペンギン先生 ペンギン先生

プログラムがOSに対して行っている「お願い」(システムコール)をリアルタイムで覗き見できるツールだよ。ファイルを開く、ネットワーク通信する、メモリを確保する…こういった操作が全部見えるんだ

ひよこ ひよこ

どういうときに使うの?

ペンギン先生 ペンギン先生

プログラムが動かないけど原因がわからない」ときの最終兵器だよ。たとえば strace -e open cat /etc/hosts と実行すると、catコマンドがどのファイルを開こうとしているかが見える。設定ファイルのパスが間違っていたり、パーミッションで弾かれている場合も一目でわかるんだ

ひよこ ひよこ

動いているプログラムにも使えるの?

ペンギン先生 ペンギン先生

strace -p PID で実行中のプロセスにアタッチできるよ。Webサーバーが突然遅くなったとき、straceで見ると「特定のファイルの読み込みでブロックしている」といった原因がわかったりする。本番環境でも使える強力な調査手法だね

ひよこ ひよこ

出力がすごく多くて読みにくそうだけど、コツはあるの?

ペンギン先生 ペンギン先生

-e trace=network でネットワーク系だけ、-e trace=file でファイル系だけに絞り込めるよ。-c オプションを使うと、システムコールごとの呼び出し回数と所要時間の統計が出るからパフォーマンス分析にも便利だね

ひよこ ひよこ

macOSでもstraceは使えるの?

ペンギン先生 ペンギン先生

macOSにはstraceがないけど、代わりに dtruss や dtrace というツールがあるよ。Windowsには Process Monitor(Procmon)が近い存在だね。ちなみにstraceの裏側では ptrace というシステムコールを使っていて、これはデバッガ(gdbなど)と同じ仕組み。だからstraceを使うとプログラムがかなり遅くなる点は要注意で、本番環境では短時間だけアタッチするのがベストプラクティスだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「strace」って出てきたら「プログラムシステムコールを追跡するデバッグツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「system call trace」 = システムコール追跡
💬 system call(システムコール)をtrace(追跡)するツールで、頭文字を取ってstraceだよ
← 用語集にもどる