15.2. Dyninst の使用
15.2.1. SystemTap での Dyninst の使用 リンクのコピーリンクがクリップボードにコピーされました!
SystemTap とともに Dyninst を使用して root
ユーザー以外がユーザー空間の実行ファイル をインストルメント化できるようにするには、--dyninst
(または --runtime=dyninst
) コマンドラインオプション stap
を指定してコマンドを実行します。これは、SystemTap スクリプト stap
を、Dyninst ライブラリーを使用する C コードに変換し、この C コードを共有ライブラリーにコンパイルしてから、共有ライブラリーを読み込み、スクリプトを実行します。このように実行する場合は、stap
コマンドに -c
または -x
コマンドラインオプションも指定する必要があることに注意してください。
Dyninst ランタイムを使用して実行ファイルをインストルメント化するには、以下を実行します。
scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."
$ scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."scl enable devtoolset-11 "stap --dyninst -c 'command' option... argument..."
同様に、Dyninst ランタイムを使用してユーザーのプロセスをインストルメント化するには、以下を実行します。
scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."
$ scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."scl enable devtoolset-11 "stap --dyninst -x process_id option... argument..."
SystemTap の Red Hat Developer Toolset バージョンの詳細は、12章SystemTap を参照してください。SystemTap とその使用方法の概要は、Red Hat Enterprise Linux 7 の SystemTap ビギナーズガイド を参照してください。
例15.1 SystemTap での Dyninst の使用
以下の内容を exercise.C
含むという名前のソースファイルについて考えてみましょう。
このプログラムは、開始番号の入力をユーザー要求し、1 までのカウントダウンを行います。これは、標準出力に番号を出力するために各反復に対して print_iteration()
関数を呼び出します。Red Hat Developer Toolset の g++
コンパイラーを使用して、このプログラムをコマンドラインでコンパイルします。
scl enable devtoolset-11 'g++ -g -o exercise exercise.C'
$ scl enable devtoolset-11 'g++ -g -o exercise exercise.C'
ここ cout.stp
で、以下の内容を含む別のソースファイルを考慮します。
この SystemTap スクリプトは、プロセスの実行中に print_iteration()
関数が呼び出された回数を出力します。このスクリプトは、exercise
バイナリーファイルで実行します。