プログラミングユーティリティ

prex の起動

ユーザーは、prex を使用してプログラムをロードするか、もしくは実行中のプロセスに prex を接続することができます。以下の 2 つの節で、その手順を説明します。

prex によるプログラムの起動

prex を使用してプログラムを起動すると、ターゲットのプログラムに libtnfprove ライブラリがプリロードされます。したがって、プログラムを明示的に libtnfprobe にリンクする必要はありません。

prex は、プログラムを起動し、コードが実行される前にそのプログラムを停止します。.init() セクションが実行される前であってもプログラムの実行は停止されるため、プローブポイントを .init() セクションに配置して初期化コードをトレースすることができます。

プローブポイントが含まれていて、引数を受け取らない a.out という単純な実行可能プログラムの場合には、以下のコマンドを使用できます。

$ prex a.out

注 -

(prex は、環境変数 $PATH を使用して実行可能プログラムを検索します。)


オプションを指定するには、以下の書式で指定します。

prex [-o outfilename] [-s kbytes_size]
     [-l sharedobjs] cmd [cmdargs...]

-o-s-l オプションについては、prex のコマンド行オプション」で説明しています。

実行中のプロセスへの prex の接続

a.out という名前のプログラムを実行中に、その a.out のプロセス ID (PID) が 2374 である (ps(1) コマンドを使用して確認できます) が示した場合には、以下のコマンドによって prexa.out に接続できます。

$ prex -p 2374

実行中のプログラムに prex を接続する場合には、先に libtnfprobe をそのプログラムにリンクする必要があります。libtnfprobe にリンクしていないと、libtnfprobe がプログラムにリンクされていないというエラーメッセージが表示され、prex が終了します。

libtnfprobe とのリンク

libtnfprobe ライブラリにリンクすると、割り当てられたトレースファイルのサイズ (prex のコマンド行オプションで制御可能) に約 33 KB (25 KB は共有可能) を加えた分だけプログラムのサイズが、増加します。prex を使用して実行中のプログラムに接続しない場合は、libtnfprobe にリンクしないでください。

ただし、再起動が容易ではなく、長時間連続して実行するプログラムの場合で、将来そのプログラムに関する情報を収集する可能性がある場合には、libtnfprobe をプログラムにリンクしてください。ウィンドウサーバーなどが、その例です。このような停止や再起動を頻繁に行わない種類のプログラムの場合には、プログラムの実行を開始する前に libtnfprobe にリンクする必要があります。

以下のいずれかの方法で libtnfprobe に、リンクすることができます。

これからプログラムのコンパイルを行う場合には、cc 行に -ltnfprobe を追加します (-lthread を使用している場合には、必ず -lthread の前に -ltnfprobe を入力してください)。

$ cc -ltnfprobe -lthread -o cookie cookie.c

プログラムがコンパイル済みの場合、または libtnfprobe に明示的に依存するプログラムを作成しない場合には、以下のコマンドを使用します。

$ LD_PRELOAD=libtnfprobe.so.1 executable_object_name

LD_PRELOAD については、『リンカーとライブラリ』を参照してください。

prex の停止と再開

prex を使用してプログラムをロードするか、または実行中のプログラムに prex を接続したら、Control-c キーを押してプログラムを停止し、制御を prex に渡します。

prex が実行されて、プログラムが停止すると、prex のプロンプトが表示されます。

prex>

このプロンプトに prex コマンドを入力して、プローブポイントを制御します。たとえば、プローブポイントの一覧表示や、トレースの開始、プログラムのデバッグを行うことができます。

プログラムの実行を再開するには、continue コマンドを入力します。

prex> continue

プログラムを停止して prex に戻るには、Control-c キーを押します。

$ ^c
prex>

prex の標準のコマンド行オプションを表 1-1 に示します。

prex のコマンド行オプション

表 1-1 prex のコマンド行オプション

オプション 

定義 

-otrace_file

トレースファイル trace_file には、prex コマンドによって収集された情報が格納されます。trace_file の場所は、prex を起動したディレクトリに対する相対パスとみなされます。引数として trace_file を指定しなかった場合は、$TMPDIR/trace-pid がデフォルトの場所になります。この pid には、プログラムのプロセス ID が入ります。$TMPDIR が設定されていない場合は、/tmp が使用されます。

 

プログラムをトレースするときには、起動時に設定されたトレースファイル (デフォルトのファイル、または -o ファイル名で指定されたファイル) がそのプログラム用として使用されます。

-l libraries

引数 libraries には、プログラムにプリロードするライブラリの名前を指定します。ライブラリの指定方法、およびライブラリの検索場所については、LD_PRELOAD (ld(1) を参照) の規則が適用されます。複数のライブラリを指定するには、各ライブラリ名を空白文字で区切り、そのリスト全体を二重引用符で囲んでください。

 

prex がプログラムをロードするときには、libtnfprobe.so.1 がデフォルトのライブラリになります。実行中のプロセスに prex を接続するときには、このオプションを使用することはできません。

-s size

size は、キロバイト (210 バイト) で表したトレースファイルのサイズです。トレースファイルのデフォルトのサイズは、4 MB です。指定可能な最小サイズは、128 KB です。