• Imagix 4D ユーザガイド
  • 目次

付録C. コンパイラモニタの使用

imagix-cc-monitor ユーティリティは、非システム処理を監視し、コンパイラの動作を記録します。コードのコンパイル時にこの機能を実行することによって、Imagix 4D へコードをロードする [Makeログ] から展開する解析方法で使用するログファイルを生成することが可能です。

imagix-cc-monitor は、コマンドラインで実行します。Imagix 4D のインストレーションでは、Windows 版および Linux 版の双方において、実行ファイルの形で ../imagix/bin ディレクトリに格納されます。

Imagix 4D が稼働しているマシンとは異なるマシンでコードをコンパイルする場合、コンパイルを実行するマシンに適切な実行ファイルをコピーの上、コピー先のマシン上でその実行ファイルを実行してください。その後、出力されたログファイルを Imagix 4D が稼働するマシンへコピーし、ソースコードのロードに使用します。imagix-cc-monitor と Imagix 4D が別々のマシンで稼働し、特にオペレーティング・システムが異なる環境においては、[Makeログ] から展開する解析方法で説明されている通り、[ディレクトリマッピング] の置換を使用しパスを調整する必要があります。

imagix-cc-monitor の実行

imagix-cc-monitor ユーティリティの実行には、少なくとも -cc オプションならびに監視対象となるコンパイラの実行ファイル名(compiler_name)が必要です。
imagix-cc-monitor -cc compiler_name

このユーティリティの実行には、パーミッシンが問題となります。コンパイル処理を監視するために、imagix-cc-monitor とコンパイルを実行するユーザは、同一でなければいけません。管理者あるいは root ユーザとしてユーティリティを実行するという方法もありますが、ユーティリティはのちに、関係のないシステム処理の監視に時間を費やすことになるため、あまり適切な手法ではありません。

imagix-cc-monitor のオプション

-cc compiler_name:   監視対象のコンパイラを指定します。

複数のコンパイラ名を監視の対象とするには、-cc compiler_name オプションを各コンパイル名に対して必要な数だけ追記します。例えば、コンパイラ gcc、g++、cl の3つを使用してソフトウェアをビルドする場合、以下のようにコマンドを記述します。

imagix-cc-monitor -cc gcc.exe -cc g++.exe -cc cl.exe -log c:\test\buildlog

-log output_file:   コンパイラの実行内容を記録するログファイルを指定します。

実行中に特定された各コンパイラの実行内容は output_file に記録されます。output_file が既に作成されている際は、上書きされます。-log オプションを指定しない場合にはコンパイラの処理データは標準出力されます。また、これをファイルにリダイレクトすることも可能です。

-cmdfileflag flag:   コマンドファイルの識別子を指定します。

一部のコンパイラでは、渡される引数を拡張するためのコマンドファイルの使用をサポートします。例えば、Microsoft Visual C++ のコンパイラでは、コンパイラ実行時のトークン @c:\some\path\filename.tmp によって、コマンドファイル c:\some\path\filename.tmp を読み取り、そのコンテンツは実行中に他の引数へ追加されます。

imagix-cc-monitor は、同じコマンドファイルを読み取り、そのコンテンツを記録することで、このようなコンパイラの機能をサポートするのです。前述の例において、識別子 は "@" であり、-cmdfileflag が指定されていない場合は、デフォルトの値にもなります。

間隔設定のオプション
imagix-cc-monitor を起動すると、同ツールはコンパイラの動作をサンプリングし始め、指定の時間、処理が発生しないと最終的にタイムアウトします。監視におけるデフォルトの間隔の設定は多くの環境に適応するものであり、オプションの設定は省略することが可能です。しかしながら、いくつかの例外が存在します。

例えば、非常に処理速度の速いマシンで、コンパイル対象の特定のファイルに関する情報が、サンプルポイント間で行き来することがある場合、それらのファイルはログファイルには記録されません。これを回避するには、サンプル間隔を短く指定する必要があります。

また、コンパイル処理以外に、コンパイル・コマンド間の間隔を長くあけるような、時間を要する処理がビルドに組込まれる場合には、別の例外が発生することがあります。このようなケースでは、run_count を変更することによって、監視が途中でタイムアウトすることを防ぎます。

必要に応じて、次のオプションを使用し各種の間隔を変更することが可能です。

-initialwaitdelay_countコンパイラが動作を開始するまで待機するサイクル数を指定します。
-runforrun_countコンパイラの動作を監視するサイクル数を指定します。
-intervalinterval_msecサンプル間隔を指定します(各サイクルの長さ)。


-initialwait および -runfor は計算値に整数を使用します(デフォルト値は、-initialwait が-1、-runfor が-200)。これらの値を -interval(デフォルト値は100)と組み合わせて、間隔を算出します。

delay_msec = delay_count * interval_msec
run_msec = run_count * interval_msec

これらの間隔設定は、指定する値が正数あるいは負数によって、その内容が異なります。

delay_msecrun_msec動作内容
<0<0最初の動作を無期限に待機し、abs(run_msec)でアクティビティがなくなると停止します。 これがデフォルトです
<0>=0最初の動作を無期限に待機してから、run_msecをカウントダウンします。
>=0<0delay_msecをカウントダウンし、abs(run_msec)でアクティビティがなくなった後に停止します。
>=0>=0delay_msec + run_msec の間カウントダウンします。
 

Linuxにおける代替

Linuxでは、imagix-cc-monitorユーティリティは、/proc/pidの内容を監視することにより、コンパイラ呼び出しに関する情報を収集します。 /proc/pidに記録されるプロセスデータの長さは制限されています。 多くのデフォルトのLinux構成では、呼び出しは2000文字の後に切り捨てられます。 そのため、キャプチャしているコンパイラの呼び出しが長い場合、imagix-cc-monitorによって生成されたログファイルには重要なデータが不足している可能性があります。 これが環境の問題である場合、Imagix 4Dのディストリビューションで提供される2つのスクリプトが代替アプローチをサポートします。

両方のスクリプトは同じ一般的なアプローチを使用します。これらは一時的にコンパイラの代わりをし、渡された呼び出しコマンドを記録します。imagix-cc-substはそこで終了します。imagix-cc-wrapperは、コマンドを記録した後、一時的に名前を変更したコンパイラにそのコマンドを渡します。

詳細については、../imagix/binディレクトリにあるスクリプト自体に記載されています。