Straceは非常に強力なデバッグコマンドラインユーティリティツールであり、特定のプログラムのシステムコールとシグナルを監視することで問題のトラブルシューティングに役立ちます。利用可能なソースコードがない場合は、straceを使用してプログラムがシステムとどのように相互作用するかを分析できます。この記事では、Linuxでプログラムとプロセスをトラブルシューティングおよびデバッグするためのいくつかの重要なstraceコマンドについて説明します。
インストール
straceユーティリティツールのインストールは、簡単で簡単なプロセスです。次のコマンドを使用して、Linuxディストリビューションに従ってアプリケーションをインストールします。
Debian / Ubuntu
$ sudo apt install strace
RedHat / CentOS
$ yum install strace
次のコマンドを実行して、インストールを確認します
$ strace -V
出力:
1.straceを使用してLinuxコマンドシステムコールをトレースする
Straceは、Linuxコマンドシステムコールをトレースするときに役立ちます。この例では、単純なコマンド pwd トレースに使用されます。
$ strace pwd
出力:
2。ファイル内のトレースログをリダイレクトする
システムコールのトレースログは、次のようにstraceコマンドを使用してファイルにリダイレクトできます。
$ strace -o pwd-log.txt pwd
catコマンドを使用して、ファイルの内容を次のように検索します。
$ cat pwd-log.txt
3。通常の出力ではなく、straceを使用してシステムコールの概要を出力します。
オプション-cを指定してstraceを使用すると、ログの要約を印刷できます。この例では、Linuxコマンドpwdの要約が表示されます。
$ strace -c pwd
出力:
4。 straceを使用して特定のシステムコールをトレースする
オプション-eおよびトレースタイプ(読み取り、書き込み)を指定したStraceコマンドを使用して、特定のシステムコールをトレースできます。この例では、writeシステムコールがコマンドpwdに対してトレースされています。
$ strace -e trace=write pwd
出力:
5。各システムコールのタイムスタンプを出力するStraceコマンド。
オプション-rを指定したStraceコマンドを使用して、各システムコールのすべての相対タイムスタンプを出力できます。
$ strace -r pwd
出力:
6。プロセスIDを使用したトレース
システムですでに実行中のプロセスがある場合は、オプション-pとプロセスIDを指定してstraceコマンドを使用することにより、システムコールをトレースできます。この例では、nginxのプロセスIDがトレースに使用されています
構文
$ strace -p <process id>
$ strace -p 12842
Ctrl+Cを押すとトレースを停止できます。
7。デバッグ出力を出力するStraceコマンド
オプション-dを指定したStraceコマンドを使用して、デバッグ出力を出力できます。この例では、単純なLinuxコマンドpwdがトレースに使用されています。
$ strace -d pwd
出力:
8。システムコールに費やされた時間を出力するStraceコマンド。
オプション-Tを指定したStraceコマンドは、システムコールに費やされた時間を次のように示します。
$ strace -T pwd
出力:
9。命令ポインタを出力するStraceコマンド
オプション-iを指定したStraceコマンドは、命令ポインターを出力します。この例では、単純なLinuxコマンドpwdがトレースに使用されています。
$ strace -i pwd
出力:
10。特定の条件に基づいてシステムコールをトレースするStraceコマンド
Straceコマンドを使用して、メモリ、プロセス、CPUなどの特定の条件に基づいてシステムコールをトレースできます。この例では、メモリ管理に関連するシステムコールが、単純なLinuxコマンドpwdに対してトレースされています。
$ strace -q -e memory pwd
出力:
11。信号関連のシステムコールをトレースするStraceコマンド
コマンドでトレースタイプを定義することにより、信号関連のシステムコールをトレースできます。この例では、 nc -v -n localhost 80 信号に関連するシステムコールをトレースするために使用されます。
$ strace -e trace=signal nc -v -n 127.0.0.1 80
出力:
結論
この記事では、straceユーティリティツールとは何か、いつ使用できるかを学びました。また、システムコールとプロセスのトラブルシューティングとデバッグを行うための重要なstraceコマンドについても説明しました。