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
的方法的寻址操作。