プログラムのパフォーマンス解析

vars

vars は以下の構文を持っています。


vars [-aho] var ...
vars [-ahilo]
vars [-ahlo] protected by lock
vars [-ahlo] [directly] read by func ...
vars [-ahlo] [directly] written by func ...
vars [-ahlo] [directly] accessed by func ...

読み込まれたファイルの変数についての情報をリストします。ただし、実際に使用されている変数のみが表示され、プログラム中で宣言はされていても、アクセスされることのない変数は表示されません。

表 A-9 vars のオプション

オプション 

定義 

 

-a

(assert) assert mutex|rwlock protects サブコマンドの指定に従って、各変数がどのロックによって保護されることになっているかの情報を提示します。情報は以下のように表示されます。

assert=lock

アサーションに違反する場合は、解析の後、行の先頭にアスタリスク(*) が付けられます (例:*assert=<lock>)。

-h

(held) 変数がアクセスされていた間、どのロックが整合性を保持されていたかについての情報を提示します。この情報は、analyze サブコマンドの実行後に提示されます。変数が決してアクセスされない場合、この情報は提示されません。情報は次のように表示されます。

held={ <lock> ... }

ロックが整合性を保持されておらず、変数に書き込みが行われた場合、行の先頭にアスタリスク(*) が付けられます (例:*held={ })。funcs とは異なり、vars サブコマンドは、ロックが実際には保持されていなくても、ほかのロックによってカバーされていれば、変数を保護しているものとしてロックをリストします (assert の「assert rwlock covers」を参照してください)。

-i

(ignored) 無視されている変数もリストします。

-l

(long) -aho に相当します。

-o

(other) 各変数について以下の情報を提示します (該当する場合)。

=cond_var

この変数は状態変数として使用されています。 

=ignored

ignore サブコマンドを介して、ロック lint がその変数を無視するように明示的に指示されています。 

=read-only

(assert read only によって)ロック lint にはその変数が書き込み禁止であることが伝えられ、書き込みが行われた場合には警告を発します。書き込みが行われた場合は、解析後、その後ろにアスタリスク (*) が付けられます (例: =read-only*)。 

=readable

declare readable サブコマンドによって、その変数はロックを保持しなくても安全に読み取れることがロック lint に伝えられています。 

=unwritten

その変数が書き込み禁止と宣言されていない間も、書き込みが行われませんでした。この情報は解析後に現れます。 

vars [-aho] var ...

個々の変数についての情報をリストします。デフォルトでは、この形式のサブコマンドは、-aho が指定された場合と同様に、変数についての詳細情報をすべて提供します。

vars [-ahilo]

無視されていないすべての変数についての情報をリストします。-i が指定された場合、無視されている変数の情報も提示されます。

vars [-ahlo] protected by lock

指定されたロックによって保護される変数のみをリストします。このサブコマンドは、analyze サブコマンドの実行後にのみ実行されます。

vars [-ahlo] [directly] read by func ...

指定された関数の呼び出しの結果として読み取りが行われる変数のみをリストします。 以下の「directly について」を参照してください。

vars [-ahlo] [directly] written by func ...

指定された関数の呼び出しの結果として書き込みが行われる変数のみをリストします。以下の「directly について」を参照してください。

vars [-ahlo] [directly] accessed by func ...

指定された関数の呼び出しの結果としてアクセス (読み取りまたは書き込み) が行われる変数のみをリストします。

directly について

関数のリストによってアクセスされる変数をリストする形式では、directly が指定されると、指定された関数によって直接アクセスされる変数のみがリストされます。directly を指定しない場合、これらの関数によってアクセスされる変数、それらが呼び出す関数、またそれらの関数が呼び出す関数...、などがリストされます。