Polyspace 桌面端用户界面中的变量访问
本主题侧重于 Polyspace® 桌面端用户界面。若要了解 Polyspace Access Web 界面中的等效窗格,请参阅Polyspace Access Web 界面中的全局变量 (Polyspace Access)。
变量访问窗格会显示全局变量(和局部静态变量)。对于每个全局变量,此窗格会列出所有对变量执行读取/写入访问的函数和任务,以及它们的属性(例如值、读取/写入访问和共享使用)。
要打开此窗格,请在 Polyspace 桌面端用户界面中选择结果详细信息窗格中的 按钮。
对于每个变量和每项读取/写访问,变量访问窗格都会包含相关属性。围绕变量,下表中列出了各种属性。
属性 | 描述 |
---|---|
变量 | 变量的名称 |
文件 | 包含变量声明的源文件 |
值 | 变量的值(或值范围) 对于指针变量,此列为空。 |
读取次数 | 变量被读取的次数 |
写入次数 | 变量被写入的次数 |
由任务写入 | 写入变量的任务数 |
由任务读取 | 读取变量的任务数 |
保护 | 共享变量是否阻止并发访问 (仅当使用列的输入值为共享时才填写) 此列中可能的输入值为:
有关这些输入值的详细信息,请参阅多任务。 |
使用 | 如果变量是在任务之间共享的,则为 Shared ;否则为空 |
行 | 变量声明的行号 |
列 | 变量声明的列号(从行开头算起的字符数) |
数据类型 | 变量的数据类型(C/C++ 数据类型或结构体/类) |
双击某个变量名称可查看已对该变量执行的读取/写入操作。变量访问窗格中的箭头符号 和
分别指示对全局变量执行读取和写入访问的函数。类似地,执行读取和写入访问的任务分别由符号
和
予以指示。有关这些任务的更多信息,请参阅
Tasks (-entry-points)
。
围绕对变量的访问操作,下表中列出了窗格中描述的各种属性。
属性 | 描述 |
---|---|
变量 | 对变量执行读取/写入访问的函数(或任务)的名称 |
值 | 执行读取/写入访问的函数或任务中的变量的值或值范围 对于指针变量,此列为空。 |
由任务写入 | 仅限任务:对变量执行写入访问的任务的名称 |
由任务读取 | 仅限任务:对变量执行读取访问的任务的名称 |
行 | 函数或任务访问变量的行号 |
列 | 函数或任务访问变量的列号 |
文件 | 包含对变量的访问操作的源文件 如果此列包含名称 |
例如,以全局变量 SHR2
为例:
文件 tasks1.c
中的函数 Tserver
对 SHR2
执行两个写入操作。在变量访问窗格中,这由变量 SHR2
下标有 的两个
Tserver()
实例予以指示。类似地,任务 server1
和 server2
的两个写入访问也列在 SHR2
下并标有 。
变量访问窗格中用于变量的颜色方案为:
黑色:全局变量。
橙色:在任务之间共享的且不阻止并发访问的全局变量。
绿色:在任务之间共享的且阻止并发访问的全局变量。
灰色:已声明但在可达代码中未使用的全局变量。
如果某个任务对全局变量执行某些操作,但这些操作在不可达代码中,则该任务将被着色为灰色。
从变量访问窗格中获取的有关全局变量和读取/写入访问操作的信息称为数据字典。
您还可以从变量访问窗格执行以下操作。
查看访问图
使用变量访问窗格以图形格式查看对全局变量的访问操作。选择全局变量,然后点击 。
下面是访问图的示例:
查看结构化变量
对于结构化变量,请从变量访问窗格中查看各个字段。例如,对于结构体 SHR4
,该窗格会显示字段 SHR4.A
和 SHR4.B
,以及对它们执行读取/写入访问的函数。
查看对匿名变量的操作
您可以查看对匿名变量的操作。例如,以下面的代码行为例,它声明了一个未命名并集,其中的变量位于绝对地址:
union {char, c; int i; } @0x1234;
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
的方法的寻址操作。