Main Content

Polyspace デスクトップ ユーザー インターフェイスの [変数アクセス]

このトピックでは、Polyspace® デスクトップ ユーザー インターフェイスに注目します。Polyspace Access Web インターフェイスでの同等のペインについては、Global Variables in Polyspace Access Web Interfaceを参照してください。

[変数アクセス] ペインにはグローバル変数 (およびローカルの静的変数) が表示されます。このペインには、各グローバル変数ごとにこの変数に対して読み取り/書き込みアクセスを実行するすべての関数およびタスクが一覧で表示され、これらの属性値である値、読み取り/書き込みアクセス、共有での使用状況なども表示されます。

このペインを開くには、Polyspace デスクトップ ユーザー インターフェイスの [検証結果の詳細] ペインで、 ボタンを選択します。

各変数とそれぞれの読み取り/書き込みアクセスについては、[変数アクセス] ペインに関連する属性があります。変数について、さまざまな属性がこの表に一覧表示されます。

属性説明
変数

変数名

ファイル変数宣言を含むソース ファイル

変数の値 (または値の範囲)

ポインター変数の場合、この列は空です。

読み取り数変数が読み取られる回数
書き込み数変数が書き込まれる回数
書き込み元タスク変数に書き込むタスクの名前
読み取り元タスク変数を読み取るタスクの名前
保護

共有変数が同時アクセスから保護されるかどうか

([使用法] 列にエントリ [共有] がある場合にのみ設定されます)

この列の可能なエントリは次のとおりです。

  • クリティカル セクション: コードのクリティカル セクションで変数へのアクセスがある場合

  • 時間的に排他: 相互に排他的なタスクで変数へのアクセスがある場合

これらのエントリについての詳細は、マルチタスキングを参照してください。

使用法タスク間で変数が共有されている場合は Shared。そうでなければ空白
変数宣言の行番号
変数宣言の列番号 (最初の行からの文字数)
データ型変数のデータ型 (C/C++ データ型または構造体/クラス)

変数名をダブルクリックして、変数に対する読み取り/書き込みアクセス操作を表示します。[変数アクセス] ペインの矢印のシンボル および は、グローバル変数に対して読み取りおよび書き込みアクセスをそれぞれ実行している関数を示します。同様に、読み取りおよび書き込みアクセスを実行しているタスクは、シンボル および によってそれぞれ示されます。タスクの詳細は、タスク (-entry-points)を参照してください。

変数へのアクセス操作について、このペインに表示されるさまざまな属性を一覧表に示します。

属性説明
変数

変数に対して読み取り/書き込みアクセスを実行している関数 (またはタスク) の名前

読み取り/書き込みアクセスを実行する関数またはタスク内の変数の値または値の範囲

ポインター変数の場合、この列は空です。

書き込み元タスクタスクの場合のみ: 変数への書き込みアクセスを実行するタスクの名前
読み取り元タスクタスクの場合のみ: 変数への読み取りアクセスを実行するタスクの名前
関数またはタスクによる変数へのアクセスが行われる行番号
関数またはタスクによる変数へのアクセスが行われる列番号
ファイル

変数へのアクセス操作を含むソース ファイル

この列に __polyspace__stdstubs.c という名前が含まれている場合、この名前は変数が標準ライブラリ関数の内部でアクセスされていることを示します。

たとえば、グローバル変数 SHR2 を考えます。

ファイル tasks1.c 内の関数 Tserver は、SHR2 に対して 2 つの操作を実行します。これは、[変数アクセス] ペインで でマークされている、変数 SHR2 の下の Tserver() の 2 つのインスタンスによって示されています。同様に、タスク server1 および server2 による 2 つの書き込みアクセスもまた でマークされ、SHR2 の下に列挙されています。

[変数アクセス] ペインの変数の配色は以下のとおりです。

  • 黒: グローバル変数。

  • オレンジ: タスク間で共有されている、同時アクセスに対して保護されていないグローバル変数。

  • オレンジ: タスク間で共有されている、同時アクセスに対して保護されたグローバル変数。

  • グレー: 宣言されているが、到達可能コードで使用されないグローバル変数。

タスクで特定の操作がグローバル変数で実行されても、当該操作が到達不能コードにある場合、そのタスクの色はグレーになります。

[変数アクセス] ペインから取得したグローバル変数および読み取り/書き込みアクセス操作の情報は、データ ディクショナリと呼ばれます。

また [変数アクセス] ペインから次のアクションを実行できます。

アクセス グラフの表示

[変数アクセス] ペインを使用して、グローバル変数へのアクセス操作を図解表示します。グローバル変数を選択して をクリックします。

アクセス グラフの例を次に示します。

構造化された変数の表示

構造化された変数については、[変数アクセス] ペインから個々のフィールドを表示します。たとえば、構造体 SHR4 の場合は、ペインにはフィールド SHR4.A および SHR4.B と、それらに対して読み取り/書き込みアクセスを実行する関数が表示されます。

無名関数に対する操作の表示

無名変数に対する操作を表示できます。たとえば、変数をもつ名前のない共用体を絶対アドレスに宣言している次のコード行を考えます。

union {char, c; int i; } @0x1234;
前述のコードを解析して iar コンパイラを指定する場合、0x1234 の無名変数が pstanonymous で始まる名前で [変数アクセス] ペインに表示されます。

グローバル ポインターによるアクセスの表示

グローバル ポインターにより間接的に実行される、グローバル変数に対するアクセス操作を表示します。

変数への読み取り/書き込みアクセスがグローバル ポインターにより実行されると、アクセスは (読み取り) または (書き込み) によってマークされます。ローカル ポインターによるアクセスは、他の直接アクセスと同様に表示されます。

たとえば、ファイル initialisations.c では、変数 arr が配列 tab に対するポインターとして宣言されています。

ファイル main.c では、グローバル ポインター変数 arr によって関数 interpolation()tab が読み取られています。この操作は [変数アクセス] ペインで、 アイコンによって示されます。

動的メモリ割り当てでは、メモリはポインターに直接割り当てられます。[値] 列は非ポインター変数の場合にのみ入力されるため、この列は動的に割り当てられたメモリに格納されている値の検索には使用できません。[ソース] ペイン上のポインターのデリファレンスに移動するには、[変数アクセス] ペインを使用します。このペインのツールヒントを使用して、各ポインター デリファレンスに続く値を見つけます。

呼び出し元および呼び出し先の表示と非表示

[変数アクセス] ペインをカスタマイズして共有変数のみを表示します。[変数アクセス] ペインのツール バーで、[非共有変数] ボタン をクリックして非共有変数を表示または非表示にします。

到達不能コードでのアクセスの表示または非表示

フィルター ボタン をクリックして、到達不能コードで発生する読み取り/書き込みアクセスを非表示にします。

その他の機能

[変数アクセス] ペインでの読み取り/書き込み操作のように、グローバル変数またはオブジェクト (C++ の場合) のアドレス指定操作を表示することはできません。たとえば、以下の C++ コードについて考えます。

class C0 
{ 
public: 
  C0() {} 
  int get_flag() 
  { 
    volatile int rd; 
    return rd; 
  } 
  ~C0() {} 
private: 
  int a;                /* Never read/written */ 
}; 

C0 c0;                  /* c0 is unreachable */ 

int main() 
{ 
  if (c0.get_flag())    /* Uses address of the method */ 
    { 
      int *ptr = take_addr_of_x(); 
      return 1; 
    } 
  else 
    return 0; 
}

[変数アクセス] ペインにメソッドの呼び出し c0.get_flag() が表示されないのは、この呼び出しがオブジェクト c0 に属するメソッドに対するアドレス指定操作であるためです。