9.2. strace の使用
					分析するプログラムで strace ユーティリティーを実行するには、次のコマンドを実行します。
				
scl enable devtoolset-9 'strace program argument...'
$ scl enable devtoolset-9 'strace program argument...'
					program を、分析するプログラムの名前に置き換え、argument を、このプログラムに指定するコマンドラインオプションと引数に置き換えます。以下の例では、-p コマンドラインオプションとプロセス ID を使用して、実行中のプロセスでユーティリティーを実行できます。
				
scl enable devtoolset-9 'strace -p process_id'
$ scl enable devtoolset-9 'strace -p process_id'
					この scl ユーティリティーを使用してコマンドを実行すると、これを Red Hat Enterprise Linux システムに優先して使用する Red Hat Developer Toolset バイナリーで実行することができることに注意してください。これにより、デフォルトで Red Hat Developer Toolset strace でシェルセッションを実行できます。
				
scl enable devtoolset-9 'bash'
$ scl enable devtoolset-9 'bash'
						使用中の strace のバージョンを確認するには、以下を行います。
					
which strace
$ which strace
						Red Hat Developer Toolset の strace の実行可能なパスは、/opt で始まります。以下のコマンドを使用して、バージョン番号が Red Hat Developer Toolset strace と一致することを確認することができます。
					
strace -V
$ strace -V
9.2.1. 出力のファイルへのリダイレクト リンクのコピーリンクがクリップボードにコピーされました!
						デフォルトでは strace、各システムコールの名前、引数、および戻り値を標準エラー出力に出力します。この出力をファイルにリダイレクトするには、-o コマンドラインオプションの後にファイル名を指定します。
					
scl enable devtoolset-9 'strace -o file_name program argument...'
$ scl enable devtoolset-9 'strace -o file_name program argument...'
file_name をファイル名に置き換えます。
例9.1 出力のファイルへのリダイレクト
							例8.1「デバッグ情報を使用した C プログラムのコンパイル」 から fibonacci ファイルのバージョンを若干変更したことを検討してください。この実行可能ファイルには、Fibonacci シーケンスが表示され、オプションでこのシーケンスのメンバー数を指定することができます。このファイルで strace ユーティリティーを実行し、トレース出力を fibonacci.log リダイレクトします。
						
scl enable devtoolset-9 'strace -o fibonacci.log ./fibonacci 20'
$ scl enable devtoolset-9 'strace -o fibonacci.log ./fibonacci 20'
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
							これにより、現在の作業ディレクトリーに、fibonacci.log という新しいプレーンテキストファイルが作成されます。
						
9.2.2. 選択したシステム呼び出しの追跡 リンクのコピーリンクがクリップボードにコピーされました!
						選択したシステムコールのセットのみを追跡するには、-e コマンドラインオプションを指定して strace ユーティリティーを実行します。
					
scl enable devtoolset-9 'strace -e expression program argument...'
$ scl enable devtoolset-9 'strace -e expression program argument...'
expression を、トレースするシステムコールのコンマ区切りリスト、または 表9.1「-e オプションで一般的に使用される値」 にリストされているにキーワードに置き換えます。使用できるすべての値の説明は、strace(1) の man ページを参照してください。
| 値 | 説明 | 
|---|---|
|   
										  |   ファイル名を引数として受け入れるシステムコール。  | 
|   
										  |   プロセス管理に関連するシステムコール。  | 
|   
										  |   ネットワークに関連するシステムコール。  | 
|   
										  |   シグナル管理に関連するシステムコール。  | 
|   
										  |   IPC (inter-process communication) に関連するシステムコール。  | 
|   
										  |   ファイル記述子に関連するシステムコール。  | 
						構文 -e expression は完全なフォームの -e trace=expression の胆略であることに注意してください。
					
例9.2 選択したシステム呼び出しの追跡
							例11.1「memstomp の使用」 の employee ファイルを考慮します。この実行可能ファイルで strace ユーティリティーを実行し、mmap および munmap システムコールのみをトレースします。
						
9.2.3. タイムスタンプの表示 リンクのコピーリンクがクリップボードにコピーされました!
						トレースの各行を、時間、分、および秒で正確な時刻にプレフィックスするには、-t コマンドラインオプションを指定して strace ユーティリティーを実行します。
					
scl enable devtoolset-9 'strace -t program argument...'
$ scl enable devtoolset-9 'strace -t program argument...'
						ミリ秒を表示するには、-t オプションを 2 回指定します。
					
scl enable devtoolset-9 'strace -tt program argument...'
$ scl enable devtoolset-9 'strace -tt program argument...'
						トレースの各行を、各システムコールの実行に必要な時間にプレフィックスを付けるには、-r コマンドラインオプションを使用します。
					
scl enable devtoolset-9 'strace -r program argument...'
$ scl enable devtoolset-9 'strace -r program argument...'
例9.3 タイムスタンプの表示
							pwd という名前の実行ファイルを考慮してください。このファイルで strace ユーティリティーを実行し、出力にタイムスタンプを含めます。
						
9.2.4. サマリーの表示 リンクのコピーリンクがクリップボードにコピーされました!
						各システムコールの実行に必要な時間、これらのシステムコールが実行した回数、実行中に発生したエラー数の概要を表示するには、-c コマンドラインオプションを指定して strace ユーティリティーを実行します。
					
scl enable devtoolset-9 'strace -c program argument...'
$ scl enable devtoolset-9 'strace -c program argument...'
例9.4 サマリーの表示
							lsblk という名前の実行ファイルを考慮してください。このファイルで strace ユーティリティーを実行し、トレースの概要を表示します。
						
9.2.5. システムコール結果の改ざん リンクのコピーリンクがクリップボードにコピーされました!
システムコールから返されたエラーをシミュレートすると、プログラムで不足しているエラー処理の特定に役立ちます。
						特定のシステムコールの結果としてプログラムが一般的なエラーを受け取るには、-e fault= オプションを指定して strace ユーティリティーを実行し、システムコールを指定します。
					
scl enable devtoolset-9 'strace -e fault=syscall program argument...'
$ scl enable devtoolset-9 'strace -e fault=syscall program argument...'
						エラーの種類または戻り値を指定するには、-e inject= オプションを使用します。
					
scl enable devtoolset-9 'strace -e inject=syscall:error=error-type program argument' scl enable devtoolset-9 'strace -e inject=syscall:retval=return-value program argument'
$ scl enable devtoolset-9 'strace -e inject=syscall:error=error-type program argument'
$ scl enable devtoolset-9 'strace -e inject=syscall:retval=return-value program argument'
エラータイプと戻り値は相互排他的であることに注意してください。
例9.5 システムコール結果の改ざん
							lsblk という名前の実行ファイルを考慮してください。このファイルで strace ユーティリティーを実行すると、mmap() システムコールがエラーを返すようにします。