概要
straceは、特定のコマンドを実行するか、実行中のプロセスにアタッチして、そのプロセスのすべてのシステムコールとシグナルイベントをリアルタイムで出力します。これは、ファイルI/O、ネットワーク通信、メモリ管理など、プログラムの低レベルな動作を理解するために不可欠です。
主な機能
- プロセスのシステムコールとシグナルのトレース
- 各コールの引数、戻り値、エラーコードの表示
- 実行中のプロセスへのアタッチによるトレース
- 子プロセスも一緒にトレース
- 特定のシステムコールまたはシグナルのフィルタリング
主なオプション
straceは、さまざまなオプションを使用して、トレース方法と出力形式を細かく制御できます。
基本トレースオプション
出力制御
フィルタリング
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`strace` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
straceを活用した様々な使用例です。
簡単なコマンドのトレース
strace ls
`ls`コマンドのシステムコールをトレースします。
トレース結果をファイルに保存
strace -o date_trace.log date
`date`コマンドのシステムコールを`date_trace.log`ファイルに保存します。
実行中のプロセスをトレース
strace -p 12345
PIDが12345のプロセスにアタッチしてシステムコールをトレースします。(PIDは実際のプロセスIDに置き換えてください。)
子プロセスまでトレース
strace -f bash -c "echo Hello, strace!"
`bash`シェルで`echo`コマンドを実行する際、`bash`と`echo`両方のシステムコールをトレースします。
特定のシステムコールのみフィルタリング
strace -e trace=open,read,write cat /etc/hosts
`cat /etc/hosts`コマンドが`open`, `read`, `write`システムコールを使用しているかをトレースします。
システムコールの所要時間確認
strace -T ls
各システムコールにかかった時間を一緒に表示します。
インストール
straceは多くのLinuxディストリビューションにデフォルトで含まれていない場合があります。次のコマンドを使用してインストールできます。
Debian/Ubuntu
sudo apt update && sudo apt install strace
APTパッケージマネージャーを使用してインストールします。
CentOS/RHEL 7
sudo yum install strace
YUMパッケージマネージャーを使用してインストールします。
Fedora/RHEL 8+
sudo dnf install strace
DNFパッケージマネージャーを使用してインストールします。
ヒントと注意点
straceは強力ですが、使用する際にはいくつかの考慮事項があります。
パフォーマンスへの影響
straceはプロセスのシステムコールをインターセプトするため、トレース対象プログラムのパフォーマンスにかなりの影響を与える可能性があります。特にI/Oが多いプログラムではその傾向が顕著です。本番環境での使用には注意が必要です。
出力の解釈
straceの出力は非常に膨大になることがあるため、必要な情報のみをフィルタリング(-e)するか、ファイルに保存(-o)して分析することをお勧めします。特定のシステムコールに関する詳細情報は、`man 2 <syscall_name>`コマンドで確認できます。
権限
他のユーザーのプロセスをトレースしたり、システム全体の動作をトレースしたりするには、`root`権限が必要です。
デバッグツールとの違い
straceはシステムコールレベルで動作し、`gdb`のようなデバッガとは異なり、プログラム内部の変数や関数呼び出しを直接操作したり、スタックトレースを表示したりすることはできません。両ツールは相互に補完的に使用できます。