polyspace 桌面端用户界面中的变量访问
本主题侧重于 polyspace® 桌面端用户界面。若要了解 polyspace access web 界面中的等效窗格,请参阅。
变量访问窗格会显示全局变量(和局部静态变量)。对于每个全局变量,此窗格会列出所有对变量执行读取/写入访问的函数和任务,以及它们的属性(例如值、读取/写入访问和共享使用)。
要打开此窗格,请在 polyspace 桌面端用户界面中选择结果详细信息窗格中的
按钮。

对于每个变量和每项读取/写访问,变量访问窗格都会包含相关属性。围绕变量,下表中列出了各种属性。
| 属性 | 描述 |
|---|---|
| 变量 | 变量的名称 |
| 文件 | 包含变量声明的源文件 |
| 值 | 变量的值(或值范围) 对于指针变量,此列为空。 |
| 读取次数 | 变量被读取的次数 |
| 写入次数 | 变量被写入的次数 |
| 由任务写入 | 写入变量的任务数 |
| 由任务读取 | 读取变量的任务数 |
| 保护 | 共享变量是否阻止并发访问 (仅当使用列的输入值为共享时才填写) 此列中可能的输入值为:
有关这些输入值的详细信息,请参阅。 |
| 使用 | 如果变量是在任务之间共享的,则为 shared;否则为空 |
| 行 | 变量声明的行号 |
| 列 | 变量声明的列号(从行开头算起的字符数) |
| 数据类型 | 变量的数据类型(c/c 数据类型或结构体/类) |
双击某个变量名称可查看已对该变量执行的读取/写入操作。变量访问窗格中的箭头符号
和
分别指示对全局变量执行读取和写入访问的函数。类似地,执行读取和写入访问的任务分别由符号
和
予以指示。有关这些任务的更多信息,请参阅 。
围绕对变量的访问操作,下表中列出了窗格中描述的各种属性。
| 属性 | 描述 |
|---|---|
| 变量 | 对变量执行读取/写入访问的函数(或任务)的名称 |
| 值 | 执行读取/写入访问的函数或任务中的变量的值或值范围 对于指针变量,此列为空。 |
| 由任务写入 | 仅限任务:对变量执行写入访问的任务的名称 |
| 由任务读取 | 仅限任务:对变量执行读取访问的任务的名称 |
| 行 | 函数或任务访问变量的行号 |
| 列 | 函数或任务访问变量的列号 |
| 文件 | 包含对变量的访问操作的源文件 如果此列包含名称 |
例如,以全局变量 shr2 为例:

文件 tasks1.c 中的函数 tserver 对 shr2 执行两个写入操作。在变量访问窗格中,这由变量 shr2 下标有
的两个 tserver() 实例予以指示。类似地,任务 server1 和 server2 的两个写入访问也列在 shr2 下并标有
。
变量访问窗格中用于变量的颜色方案为:
黑色:全局变量。
橙色:在任务之间共享的且不阻止并发访问的全局变量。
绿色:在任务之间共享的且阻止并发访问的全局变量。
灰色:已声明但在可达代码中未使用的全局变量。
如果某个任务对全局变量执行某些操作,但这些操作在不可达代码中,则该任务将被着色为灰色。
从变量访问窗格中获取的有关全局变量和读取/写入访问操作的信息称为数据字典。
您还可以从变量访问窗格执行以下操作。
查看访问图
使用变量访问窗格以图形格式查看对全局变量的访问操作。选择全局变量,然后点击
。
下面是访问图的示例:

查看结构化变量
对于结构化变量,请从变量访问窗格中查看各个字段。例如,对于结构体 shr4,该窗格会显示字段 shr4.a 和 shr4.b,以及对它们执行读取/写入访问的函数。

查看对匿名变量的操作
您可以查看对匿名变量的操作。例如,以下面的代码行为例,它声明了一个未命名并集,其中的变量位于绝对地址:
union {char, c; int i; } @0x1234;iar” 编译器时,位于 0x1234 的未命名变量将出现在变量访问窗格中,且其名称以 pstanonymous 开头。
查看通过全局指针执行的访问
查看通过全局指针间接对全局变量执行的访问操作。
如果对变量的读取/写入访问是通过全局指针执行的,则该访问会标有
(读取)或
(写入)。通过指针执行的访问与任何其他直接访问的显示是相同的。
例如,在文件 initialisations.c 中,变量 arr 被声明为指向数组 tab 的指针。

在文件 main.c 中,函数 interpolation() 通过全局指针变量 arr 读取了 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 的方法的寻址操作。