主要内容

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

本主题的重点是Polyspace®桌面用户界面。要了解Polyspace Access web界面中的等效窗格,请参见多元空间访问Web界面中的全局变量

变量访问面板显示全局变量(和本地静态变量)。对于每个全局变量,该窗格列出了对变量执行读写访问的所有函数和任务,以及它们的属性,如值、读写访问和共享使用。

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

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

属性 描述
变量

变量的名称

文件 包含变量声明的源文件

变量的值(或值的范围)

对于指针变量,此列为空。

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

是否保护共享变量不受并发访问

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

这一栏可能的条目是:

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

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

有关这些条目的详细信息,请参见多任务处理

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

双击变量名可查看对变量的读写访问操作。箭头符号而且变量访问窗格表示对全局变量分别执行读和写访问的函数。同样,执行读写访问的任务也由符号表示而且分别。有关任务的更多信息,请参见任务(入口点)

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

属性 描述
变量

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

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

对于指针变量,此列为空。

写的任务 只有在任务:对变量执行写访问的任务名称
阅读任务 只有在任务:对变量进行读访问的任务名称
函数或任务访问变量的行号
上校 函数或任务访问变量的列号
文件

包含对变量的访问操作的源文件

如果此列包含名称__polyspace__stdstubs.c,表示在标准库函数中访问该变量。

例如,考虑全局变量,SHR2

这个函数,Tserver,在文件中,tasks1.c,执行两次写操作SHR2.这在变量访问的两个实例Tserver ()根据变量,SHR2,.同样,这两个写访问任务,server1而且server2,亦列于SHR2和标记

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

  • 黑色:全局变量。

  • 橙色:全局变量,在任务之间共享,对并发访问没有保护。

  • 绿色:全局变量,任务间共享,防止并发访问。

  • Gray:全局变量,声明但不在可达代码中使用。

如果任务对全局变量执行某些操作,但操作是在不可访问的代码中进行的,则任务将显示为灰色。

获取的关于全局变量和读写访问操作的信息变量访问窗格称为数据字典。

方法执行以下操作变量访问窗格。

视图访问图

控件以图形格式查看对全局变量的访问操作变量访问窗格。选择全局变量并单击

下面是一个访问图的例子:

视图结构变量

中查看结构化变量的各个字段变量访问窗格。例如,对于结构,SHR4,面板显示字段,SHR4。一个而且SHR4。B,以及对它们执行读/写访问的函数。

查看匿名变量的操作

可以查看对匿名变量的操作。例如,考虑下面这行代码,它声明了一个未命名的联合,变量位于绝对地址:

联盟{char, c;int我;} @0x1234;
当您分析前面的代码和指定iar编译器,未命名变量at0 x1234出现在变量访问窗格,其名称以pstanonymous

通过全局指针查看访问

查看通过全局指针间接执行的对全局变量的访问操作。

如果对变量的读/写访问是通过全局指针执行的,则用(读)或(写)。通过本地指针的访问显示与任何其他直接访问一样。

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

在文件中c选项卡在函数中读取,插值(),通过全局指针变量,加勒比海盗.该操作显示在变量访问面板的图标。

在动态内存分配过程中,内存直接分配给指针。因为列仅为非指针变量填充,因此不能使用此列查找存储在动态分配内存中的值。使用变量访问控件上指针的解引用窗格。使用此窗格上的工具提示查找每个指针解引用后面的值。

显示或隐藏调用者和被调用者

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

在不可达代码中显示或隐藏访问

通过单击筛选按钮,隐藏不可达代码中发生的读/写访问

其他功能

中的读/写操作不能将全局变量或对象上的寻址操作(在c++中)视为变量访问窗格。例如,考虑以下c++代码:

类C0 {public: C0() {} int get_flag() {volatile int rd;返回路;} ~C0() {} private: int a;/*从不读/写*/};C0 C0;/* c0不可达*/ int main() {if (c0.get_flag()) /*使用方法的地址*/ {int *ptr = take_addr_of_x();返回1;} else返回0;}

您看不到方法调用c0.get_flag ()变量访问窗格,因为该调用是属于该对象的方法的寻址操作c0

Baidu
map