主要内容

在访问变量Polyspace桌面用户界面

着重于Polyspace这个主题®桌面用户界面。学习中的等效窗格Polyspace访问web界面,看到的全局变量在Polyspace访问Web界面

变量访问窗格显示全局变量(局部静态变量)。对于每一个全局变量,窗格中列出了所有功能和任务执行读/写访问的变量,以及它们的属性,如价值观、读/写访问和共享使用。

打开此窗格,在Polyspace桌面用户界面,选择按钮结果细节窗格。

对于每个变量和每个读/写访问,变量访问窗格包含相关的属性。的变量,这表中列出了各种属性。

属性 描述
变量

变量的名称

文件 源文件包含变量声明

值(或范围的值)的变量

这个列是空的指针变量。

#读 多次读取的变量
#写道 变量的次数
写的任务 任务名称写在变量中
阅读任务 阅读任务变量的名称
保护

是否受并发访问共享变量

(只有当了使用列条目,共享)

在本专栏中可能的条目有:

  • 临界区:如果变量访问代码的关键部分

  • 时间排除:如果变量访问互斥任务

这些条目的更多细节,请参阅多任务处理

使用 共享如果变量之间共享任务;否则,空白的
变量声明的行号
上校 列号(从行开始的字符数)的变量声明
数据类型 数据类型的变量(C / c++数据类型或结构/类)

双击一个变量名来查看读/写操作变量的访问。箭头符号变量访问面板显示功能分别进行读和写访问的全局变量。同样,任务执行读和写访问的符号表示分别。在任务进行进一步的信息,请参阅任务(入口点)

访问操作的变量,描述的各种属性窗格中列出此表。

属性 描述
变量

函数的名称(或任务)执行读/写访问的变量

变量的值或范围的值函数或任务执行读/写访问

这个列是空的指针变量。

写的任务 只有在任务:任务执行写访问变量的名字
阅读任务 只有在任务:任务执行读访问变量的名称
行号,功能或任务访问变量
上校 列号,功能或任务访问变量
文件

源文件包含访问操作变量

如果这列名称__polyspace__stdstubs.c,这说明这个变量是一个标准库函数内部访问。

例如,考虑全局变量,SHR2:

这个函数,Tserver在文件中,tasks1.c执行两个写操作SHR2。这是表示的变量访问面板的两个实例Tserver ()根据变量,SHR2,。同样,这两个写访问的任务,server1server2也列在SHR2和标记

变量的配色方案变量访问面板是:

  • 黑色:全局变量。

  • 橙色:全局变量、共享任务之间没有防止并发访问。

  • 格林:全局变量,之间共享任务和防止并发访问。

  • 灰色:全局变量,但不是用于访问代码。

如果一个任务执行某些操作在一个全局变量,但不可到达的操作代码,是灰色的任务。

全局变量的信息获得和读/写访问操作变量访问窗格中被称为“数据字典”。

您还可以执行以下行动的变量访问窗格。

视图访问图

查看访问操作在图形格式使用一个全局变量变量访问窗格。选择全局变量并单击

这里是一个访问图的一个例子:

视图结构变量

对结构性变量,视图的单个字段变量访问窗格。例如,对于结构,SHR4窗格中显示的字段,SHR4.ASHR4.B,函数执行读/写访问。

对匿名视图操作变量

您可以查看匿名的操作变量。例如,考虑这行代码声明了一个不知名的联盟与变量在一个绝对地址:

联盟{char, c;int我;}@0x1234;
当你前面的代码和分析指定iar编译器,不愿透露姓名的变量0 x1234出现在变量访问面板与这个名字开始pstanonymous

通过视图访问全球指针

对全局变量视图访问操作进行间接通过全球指针。

如果一个读/写访问一个变量通过全球执行指针,然后访问了(读)或(写)。通过指针访问是像任何其他直接访问。

例如,在这个文件中,initialisations.c的变量,加勒比海盗被声明为指针,数组,选项卡

在文件中c,选项卡阅读的功能,插值()通过全球指针变量,加勒比海盗。该操作所示变量访问面板的图标。

在动态内存分配,直接向一个指针分配内存。因为只列填充等变量,不能使用本专栏找到动态分配的内存中存储的值。使用变量访问窗格中导航到取消引用指针的窗格。使用工具提示在这个窗格中找到以下每个指针的值。

显示或隐藏调用者和街道

自定义变量访问窗格只显示共享变量。在变量访问面板工具栏,单击按钮非共享变量显示或隐藏非共享变量。

显示或隐藏在代码的访问

隐藏的读/写访问发生在遥不可及的代码通过单击过滤器按钮

其他功能

你不能看到一个寻址操作在一个全局变量或对象(c++)的读/写操作变量访问窗格。例如,考虑以下c++代码:

类C0{公众:C0 () {} int get_flag () {int rd波动;返回路;}~ C0(){}私人:int;/ *从来不读/写* /};C0 C0;/ * c0是遥不可及的* / int main(){如果(c0.get_flag()) / *使用地址的方法* / {int * ptr = take_addr_of_x ();返回1;}其他返回0;}

你不看到方法调用c0.get_flag ()变量访问面板,因为电话是一个寻址操作方法属于对象c0