Newer
Older
Andre Maroneze
committed
---
layout: plugin
title: Scope & Data-flow browsing
Andre Maroneze
committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
description: Allows the user to navigate the dataflow of the program, from definition to use or from use to definition.
key: browsing
distrib_mode: main
---
## Overview
The **Scope** plug-in computes information about dependencies on a
user-specified lvalue `D` at a user-specified program point `L`.
It provides the following three features, which are presented in
greater detail below.
- **ShowDefs**: gives information about the statements that may contribute to the
value of `D` at `L`;
- **DataScope**: shows the statements where `D` is guaranteed to have the same
value than at `L`;
- **Zones**: shows which data is needed in the previous statements to compute
`D` at `L`.
### Show Defs
**ShowDefs** selects the statements that contribute to define the value of `D`
at `L`, and prints a message if a part of `D` might be undefined.
Notice that *undefined* here only means that it has not been defined on some
path from the beginning of the function.
### DataScope
**DataScope** selects sets of statements around a user-specified program point
`L` where a user-specified lvalue `D` is guaranteed to have the same value than
at `L`.
- Backward selected statements are colored in green: if a statement `s` belongs
to this selection, then for all executions of the function, the value of `D`
is not modified between the execution of `s` and the **next** time `L` is
reached.
- Forward selected statements are colored in blue: if a statement `s` belongs
to this selection, then for all executions of the function, the value of `D`
is not modified between the **last** time `L` is reached and the time `s` is
reached.
- Statements that are in both selections are colored in purple.
- The starting statement is underlined and is always part of the forward set.
### Zones
**Zones** computes, for each point `Li` of the function, the data `Di` needed
to know the value of `D` at `L`. After this computation, the result `Di` will
be printed in the information window each time a statement `Li` is selected.
Of course, the only interesting program points `Li` are the ones reached
before `L`.
The statements that contribute to the computation are highlighted so that you
should get the same result `Di` for successive statements that are not
highlighted.
## Usage
Those features are available through the graphical user interface once the
value analysis ([Eva](eva.html) plug-in) has been done. They can be called from
the menu **Dependencies** in the popup menu that appears when right-clicking
a statement:
- The program point `L` is the one **before** the selected statement;
- The lvalue `D` for which computations are done is either the one that is
currently selected, if any, or an lvalue entered by the user in a dialog
window.
Results are presented by coloring the statements in the graphical interface as
explained above. In addition, when something has been selected through these
dependency features, a message in the information window serves as a reminder
of where it comes from.
Note that all the variables that appear in the user-provided lvalue are taken
into account, so that selecting `T[0]` and `T[i]` might lead to different
results, even if the analysis is performed at a point where `i=0`.
## Dependencies
The **Scope** plug-in only takes into account the executions that have been
considered by [Eva](eva.html). In particular, the alarms emitted by **Eva** may
correspond to executions that it ceased to consider. The alarms emitted by
**Eva** should therefore be carefully examined by the user.