Переменный доступ в пользовательском интерфейсе рабочего стола Polyspace

Эта тема фокусируется на Polyspace® настольный пользовательский интерфейс. Чтобы узнать об эквивалентной панели в Polyspace доступ к веб-интерфейсу, смотрите Глобальные переменные в Polyspace доступ к веб-интерфейсу.

Панель Variable Access отображает глобальные переменные (и локальные статические переменные). Для каждой глобальной переменной панель перечисляет все функции и задачи, выполняющие доступ для чтения-записи на переменных, наряду с их атрибутами, такими как значения, доступы для чтения-записи и совместно использованное использование.

Чтобы открыть эту панель, в пользовательском интерфейсе рабочего стола Polyspace, нажимают кнопку на панели Result Details.

Для каждой переменной и каждого доступа для чтения-записи, панель Variable Access содержит соответствующие атрибуты. Для переменных различные атрибуты перечислены в этой таблице.

АтрибутОписание
Variables

Имя переменной

FileИсходный файл, содержащий объявление переменной
Values

Значение (или область значений значений) переменной

Этот столбец пуст для переменных указателя.

# ReadsЧисло раз переменная читается
# WritesЧисло раз переменная записано
Written by taskИмя задач, пишущих на переменной
Read by taskИмя переменной чтения задач
Protection

Защищена ли совместно используемая переменная от параллельного доступа

(Заполненный только, когда столбец Usage имеет запись, Shared),

Возможные записи в этом столбце:

  • Critical Section: Если к переменной получают доступ в критическом разделе кода

  • Temporal Exclusion: Если к переменной получают доступ во взаимоисключающих задачах

Для получения дополнительной информации об этих записях смотрите Многозадачность.

UsageShared, если переменная совместно используется задачами; в противном случае, пробел
LineНомер строки объявления переменной
ColНомер столбца (количество символов с начала линии) объявления переменной
Data TypeТип данных переменной (типы данных C/C++ или структуры/классы)

Дважды кликните имя переменной, чтобы просмотреть операции доступа для чтения-записи на переменной. Символы в виде стрелки и в панели Variable Access указывают на функции, выполняющие доступ для чтения и доступ для записи соответственно на глобальной переменной. Аналогично, задачи, выполняющие доступ для чтения и доступ для записи, обозначаются символами и соответственно. Для получения дополнительной информации о задачах смотрите Tasks (-entry-points).

Для операций доступа на переменных различные атрибуты, описанные в панели, перечислены в этой таблице.

АтрибутОписание
Variables

Имена функции (или задача) выполняющий доступ для чтения-записи на переменной

Values

Значение или область значений значений переменной в функции или задаче, выполняющей доступ для чтения-записи

Этот столбец пуст для переменных указателя.

Written by taskТолько для задач: Имя задачи, выполняющей доступ для записи на переменной
Read by taskТолько для задач: Имя задачи, выполняющей доступ для чтения на переменной
LineНомер строки, где функция или переменная доступов к задаче
ColНомер столбца, где функция или переменная доступов к задаче
File

Исходный файл, содержащий операцию доступа на переменной

Если этот столбец содержит имя __polyspace__stdstubs.c, это указывает, что к переменной получают доступ в Стандартной Библиотечной функции.

Например, рассмотрите глобальную переменную, SHR2:

Функция, Tserver, в файле, tasks1.c, выполняет две операции записи на SHR2. Это обозначается в панели Variable Access двумя экземплярами Tserver() под переменной, SHR2, отмеченный. Аналогично, эти два доступа для записи задачами, server1 и server2, также перечислены под SHR2 и отмеченный.

Цветовая схема для переменных в панели Variable Access:

  • Черный: глобальная переменная.

  • Оранжевый: глобальная переменная, совместно использованная задачами без защиты от параллельного доступа.

  • Зеленый: глобальная переменная, совместно использованная задачами и защищенная от параллельного доступа.

  • Серый: глобальная переменная, объявленная, но не используемый в достижимом коде.

Если задача выполняет определенные операции на глобальной переменной, но операции находятся в недостижимом коде, задачи окрашены в серый.

Информация о глобальных переменных и операциях доступа для чтения-записи, полученных из панели Variable Access, называется словарем данных.

Можно также выполнить следующие действия от панели Variable Access.

Просмотрите доступ к графику

Просмотрите операции доступа на глобальной переменной в графическом формате с помощью панели Variable Access. Выберите глобальную переменную и нажатие кнопки.

Вот пример графика доступа:

Просмотрите структурированные переменные

Для структурированных переменных просмотрите отдельные поля от панели Variable Access. Например, для структуры, SHR4, панель отображает поля, SHR4.A и SHR4.B, и функции, выполняющие доступ для чтения-записи на них.

Просмотрите операции на переменных без имени

Можно просмотреть операции на переменных без имени. Например, рассмотрите эту строку кода, которая объявляет объединение без имени с переменной в абсолютном адресе:

union {char, c; int i; } @0x1234;
Когда вы анализируете предыдущий код и задаете iar компилятор, переменная без имени в 0x1234 появляется в панели Variable Access с именем, которое запускается с pstanonymous.

Просмотрите доступ через глобальные указатели

Просмотрите операции доступа на глобальных переменных, выполняемых косвенно через глобальные указатели.

Если доступ для чтения-записи на переменной выполняется через глобальные указатели, то доступ отмечен (чтением) или (записью). Доступ через локальные указатели показывают как любой другой прямой доступ.

Например, в файле, initialisations.c, переменная, arr, объявляется как указатель на массив, tab.

В файле main.c, tab читается в функции, interpolation(), через глобальную переменную указателя, arr. Эту операцию показывает в панели Variable Access значок.

Во время динамического выделения памяти память выделяется непосредственно указателю. Поскольку столбец Values заполняется только для неуказательных переменных, вы не можете использовать этот столбец, чтобы найти значения сохраненными в динамически выделенной памяти. Используйте панель Variable Access, чтобы перейти к, разыменовывает указателя на панели Source. Используйте подсказки на этой панели, чтобы найти, что значения после каждого указателя разыменовывают.

Покажите или скройте вызывающие стороны и вызываемых

Настройте панель Variable Access, чтобы показать только совместно используемые переменные. На панели инструментов панели Variable Access нажмите кнопку Non-Shared Variables, чтобы показать или скрыть неразделяемые переменные.

Покажите или скройте доступы в недостижимом коде

Скройте доступ для чтения-записи, происходящий в недостижимом коде путем нажатия кнопки фильтра.

Другие функции

Вы не видите операцию обращения на глобальной переменной или объекте (на C++) как операция чтения-записи в панели Variable Access. Например, рассмотрите следующий Код С++:

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() в панели Variable Access, потому что вызов является операцией обращения на методе, принадлежащем объекту c0.