mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-08 07:42:33 +01:00
Author:admin
Date:2008-09-17T13:53:28.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@3 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
[[Property:title|Error wizard]]
|
||||
[[Property:weight|2]]
|
||||
More often than wanted, Eiffel compilations are not successful. The good point is that when an error is detected by the compiler, it will not be a problem at run-time. The bad point is that you have to fix compilation errors before being able to launch and debug your system.
|
||||
|
||||
When an error occurs during an Eiffel compilation in EiffelStudio, the '''Output''' tab of the context tool displays a description of the error and its location, which looks more or less like this:
|
||||
|
||||
[[Image:error-message]]
|
||||
|
||||
In this case, the compiler tries to explain that the identifier "sessionid" is not a known identifier in the context where it was typed. This is a common error that mainly occurs when making typos in the code. Assuming the message does not make sense to you (which may happen in more complex cases), you can query more information about the encountered error.
|
||||
|
||||
To do this:
|
||||
* [[Pick-and-drop mechanism|Pick]] the code of the error, in this case VEEN.
|
||||
* [[Pick-and-drop mechanism|Drop]] it either in the editor or on the error help button [[Image:command-error-info-icon]] .
|
||||
* A dialog is then popped up that describes extended information concerning this error type:
|
||||
|
||||
[[Image:error-description-dialog]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
[[Property:title|External commands editor dialog]]
|
||||
[[Property:weight|4]]
|
||||
From EiffelStudio, you can define up to 10 external commands. Those commands will have their output redirected in the output pane of the context tool. You can execute them through the Tools menu. A typical usage is to use those external commands to integrate with your source control management solution (e.g. CVS, Visual SourceSafe,...)
|
||||
|
||||
To define your own command, select "External commands..." in the Tools menu. Then the following dialog will appear:
|
||||
|
||||
[[Image:external-commands-dialog]]
|
||||
|
||||
With this dialog you can:
|
||||
* add new commands
|
||||
* edit existing commands
|
||||
* delete existing commands
|
||||
|
||||
To add your first command, simply click on the "Add..." button and the following command editor will appear:
|
||||
|
||||
[[Image:external-commands-dialog-editor]]
|
||||
|
||||
In this dialog you can give a name to the command, this name will be displayed in the Tools menu. The index is the position among the external commands of the command in the Tools menu. The command line is the command you want to execute. In order to execute correctly, the application you will execute needs to be in your PATH environment variable or if it is not you must provide an absolute path to the external command. And you can specify the workding directory for that command.
|
||||
|
||||
In addition to the external command name, you can pass as many options as you want plus the following placeholders that will be translated before calling the external command:
|
||||
* $class_name: this will be replaced by the name in lower case of the targeted class in editor
|
||||
* $file_name: this will be replaced by the path to the targeted class in editor
|
||||
* $directory_name: this will be replaced by the directory location of the targeted class in editor
|
||||
* $group_name: this will be replaced by the group name of the targeted class in editor
|
||||
* $line: this will be replaced by the line number of the cursor of the targeted class in editor
|
||||
* $w_code: this will be replaced by the W_code directory of current system, if defined
|
||||
* $w_code: this will be replaced by the F_code directory of current system, if defined
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
[[Property:title|Dialogs]]
|
||||
[[Property:weight|1]]
|
||||
* [[New feature dialog|New feature dialog]]
|
||||
* [[Error descriptor|Error descriptor]]
|
||||
* [[External commands editor dialog|External commands editor]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
[[Property:title|New feature dialog]]
|
||||
[[Property:weight|0]]
|
||||
* [[New feature dialog: Introduction|Introduction]]
|
||||
* [[New feature dialog overview|Overview]]
|
||||
* [[New procedure layout|Procedure layout]]
|
||||
* [[New function layout|Function layout]]
|
||||
* [[New attribute layout|Attribute layout]]
|
||||
* [[New feature dialog: feature properties modification|Feature properties modification]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
[[Property:title|New attribute layout]]
|
||||
[[Property:weight|4]]
|
||||
<div> [[Image:feature-wizard-attribute]] </div>
|
||||
When clicking '''Attribute''', the window changes to the attribute layout. It has the following components:
|
||||
* [[Feature clauses|Feature clause selection]]
|
||||
* [[Name field|Feature name field]]
|
||||
* [[Type selection|Type selection]]
|
||||
* [[Header comment|Header comment field]]
|
||||
* [[Invariant field|Invariant field]]
|
||||
* [[Set-procedure|Set-procedure check box]]
|
||||
|
||||
==Example==
|
||||
<div> [[Image:feature-wizard-attribute-example]] </div>
|
||||
<code>class
|
||||
PRODUCT
|
||||
|
||||
feature {NONE} -- Access
|
||||
|
||||
price: DOUBLE
|
||||
-- Cost in dollars.
|
||||
|
||||
feature -- Element change
|
||||
|
||||
set_price (a_price: DOUBLE) is
|
||||
-- Assign `a_price' to `price'.
|
||||
require
|
||||
a_price_non_negative: a_price >= 0.0
|
||||
do
|
||||
price := a_price
|
||||
ensure
|
||||
price_assigned: price = a_price
|
||||
end
|
||||
|
||||
invariant
|
||||
price_non_negative: price >= 0.0
|
||||
|
||||
end -- class PRODUCT</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
[[Property:title|Argument list]]
|
||||
[[Property:weight|2]]
|
||||
For functions and procedures, you can build a formal argument list. You can do this by clicking on the '''New argument''' button as many times as you need arguments.
|
||||
|
||||
{{note| '''Note''': Even though this dialog always shows parentheses, they are not generated if the list is empty (Eiffel's command-query separation (CQS) principle). }}
|
||||
<div> [[Image:feature-wizard-3-arguments]] </div>
|
||||
{{note| '''Note''': If you add arguments to a routine, it is not possible anymore to select routine type '''once'''. }}
|
||||
|
||||
For every attribute you selected, enter a name in the text box and a type using the [[Type selection|type selection]] .
|
||||
<div> [[Image:feature-wizard-1-argument]] </div>
|
||||
The code that is generated:
|
||||
<code>set_name (s: STRING) is
|
||||
do
|
||||
end</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
[[Property:title|Feature body]]
|
||||
[[Property:weight|6]]
|
||||
What goes into the feature body field is dependent on what kind of feature you wish to generate.
|
||||
* '''do''': this is the normal procedure type. Enter in the field below '''do''' a body for your feature.
|
||||
<code>
|
||||
do_something is
|
||||
do
|
||||
a := b
|
||||
end</code>
|
||||
|
||||
* '''once''': this is the type for a routine that is executed once per execution. As a once routine cannot have arguments, it is disabled when you added one or more arguments.
|
||||
<code>
|
||||
init is
|
||||
once
|
||||
load
|
||||
end</code>
|
||||
|
||||
* '''deferred''': this creates a routine of deferred type. The local and body fields gray out as they serve no use anymore.
|
||||
<code>
|
||||
do_something is
|
||||
deferred
|
||||
end</code>
|
||||
|
||||
* '''external''': this creates an Eiffel wrap routine around a routine written in another language. Use the body field to enter a string containing the necessary information about the routine using the external syntax.
|
||||
<code>
|
||||
do_something is
|
||||
external
|
||||
"C | %"location.h%""
|
||||
end</code>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
[[Property:title|Feature clauses]]
|
||||
[[Property:weight|0]]
|
||||
The feature you create will be inserted in the feature clause you specified. If the feature clause was not already in your class, or not in the right place, EiffelStudio adds the feature clause to the class text based on the feature clause order specified in the [[Preferences Reference|preferences]] . By default, this is the order used by the Eiffel Software libraries, such as EiffelBase.
|
||||
==Export status==
|
||||
The export status is the class the feature is accessible for. Usually, this is <eiffel>ANY</eiffel> for public features, or <eiffel>NONE</eiffel> for implementation features, but you can specify any class here.
|
||||
[[Image:feature-wizard-export]]
|
||||
|
||||
{{note| '''Note''': In the class text, you can export a feature to more than one class but (for simplicity) not with this dialog. }}
|
||||
|
||||
==Feature clause names==
|
||||
For feature clause names it is recommended that you pick one from the standard ones, but it is also possible to create a new one. If you have introduced a special feature clause name in your project, add it to the feature clause order list in the [[Preferences Reference|preferences]] and it will also appear in this dialog.
|
||||
[[Image:feature-wizard-clausenames]]
|
||||
|
||||
==Generated code==
|
||||
The code that is inserted in your class as a result of the selections made for the feature clause, is of the form:
|
||||
<code>feature {EXPORT} -- Clause name</code>
|
||||
except if you specified <eiffel>ANY</eiffel> as export status, which is similar to having no export status.
|
||||
<code>feature --Clause name</code>
|
||||
<br/>
|
||||
For example, if you specified a the "Initialization" feature clause name, and specified <eiffel>NONE</eiffel> as export status, you get:
|
||||
<code>feature {NONE} -- Initialization</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
[[Property:title|Header comment]]
|
||||
[[Property:weight|3]]
|
||||
In the header comment field you can type a description of the feature. For style guidelines in writing a header comment, see: [http://www.eiffel.com/doc/oosc/ Object-Oriented Software Construction, Second Edition] , paragraph 26.4. The description should be informative, clear and terse.
|
||||
|
||||
For example, suppose you have an attribute <eiffel>count</eiffel>. You can enter the following header comment:
|
||||
<div> [[Image:feature-wizard-comment]] </div><br/>
|
||||
When clicking '''OK''' this code is generated: <br/>
|
||||
<code>count: INTEGER
|
||||
-- Number of students in course</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
[[Property:title|New feature dialog: feature properties modification]]
|
||||
[[Property:weight|5]]
|
||||
* [[Feature clauses|Feature clauses]]
|
||||
* [[Name field|Name field]]
|
||||
* [[Argument list|Argument list]]
|
||||
* [[Header comment|Header comment]]
|
||||
* [[Precondition|Precondition]]
|
||||
* [[Local variable|Local variable]]
|
||||
* [[Feature body|Feature body]]
|
||||
* [[Postcondition|Postcondition]]
|
||||
* [[Type selection|Type selection]]
|
||||
* [[Invariant field|Invariant]]
|
||||
* [[Set-procedure|Set-procedure]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
[[Property:title|Invariant field]]
|
||||
[[Property:weight|9]]
|
||||
When creating an attribute, you can optionally enter or select an invariant for that feature. That invariant will be added to the end of the existing invariant clause. If the invariant clause did not exist before, it is now created.
|
||||
<div> [[Image:feature-wizard-invariant]] </div>
|
||||
If the attribute is of a reference type, you may select the invariant that the attribute may never be void. If it is of a basic expanded type, some other standard options may be chosen. For example, for <eiffel>INTEGER</eiffel> you may select that it should always be positive.
|
||||
<div> [[Image:feature-wizard-invariant-selected]] </div>
|
||||
The example above will generate the code:
|
||||
<code>
|
||||
invariant
|
||||
count_positive: count > 0
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
[[Property:title|Local variable]]
|
||||
[[Property:weight|5]]
|
||||
Enter a local variable in the <code> local </code> field. A local variable clause will be added to the feature:
|
||||
<code>
|
||||
...
|
||||
local
|
||||
n: INTEGER
|
||||
...</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
[[Property:title|Name field]]
|
||||
[[Property:weight|1]]
|
||||
The feature name field is a text box that lets you enter a name for the feature. For help on how to choose the right name for a feature, see: [http://www.eiffel.com/doc/oosc/ Object-Oriented Software Construction, Second Edition] , paragraph 26.2.
|
||||
|
||||
{{warning| '''Warning''': EiffelStudio performs no validation on the name you choose. For example if you type a space in it, it will generate the code, and detect a syntax error only when compiling. }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
[[Property:title|Postcondition]]
|
||||
[[Property:weight|7]]
|
||||
Enter a postcondition in the <code> ensure </code> field. A postcondition clause will be added to the feature:
|
||||
<code>...
|
||||
ensure
|
||||
n = count</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
[[Property:title|Precondition]]
|
||||
[[Property:weight|4]]
|
||||
Enter a precondition in the <code> require </code> field. A precondition clause will be added to the feature:
|
||||
<code>
|
||||
...
|
||||
require
|
||||
n >= 0
|
||||
...</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
[[Property:title|Set-procedure]]
|
||||
[[Property:weight|10]]
|
||||
When creating an attribute, it is common that you will also need a set-procedure for it. For example, for attribute <eiffel>property</eiffel> you need a procedure <eiffel>set_property</eiffel> to set it. This feature takes one argument of the same type as <eiffel>property</eiffel> or is anchored to it. The only thing you have to do with the feature wizard is check the button '''Generate set procedure'''.
|
||||
<div> [[Image:feature-wizard-setprocedure]] </div>
|
||||
The feature that is generated in addition to the attribute itself is placed in feature clause <code> Element change </code> and is exported to all classes. If you have selected or entered an invariant, the precondition will protect this invariant. Example of a generated set-procedure:
|
||||
<div> [[Image:feature-wizard-setprocedure-example]] </div>
|
||||
<code>
|
||||
feature -- Element change
|
||||
|
||||
set_button (a_button: EV_BUTTON) is
|
||||
-- Assign `a_button' to `button'
|
||||
require
|
||||
a_button_not_void: a_button /= Void
|
||||
do
|
||||
button := a_button
|
||||
ensure
|
||||
button_assigned: button = a_button
|
||||
end
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
[[Property:title|Type selection]]
|
||||
[[Property:weight|8]]
|
||||
Whenever you need to give a type of something in the dialog, the type selection component is used. The type selection lets you type any class name or you can pick one from the list.
|
||||
<div> [[Image:feature-wizard-typeselection]] </div>
|
||||
When you select a class that is in the system and has formal generic parameters, the type selection component lets you specify an actual generic parameter in another type selection.
|
||||
<div> [[Image:feature-wizard-generictype]] </div>
|
||||
{{note| '''Note''': the window might grow in size because of the added component. }}
|
||||
|
||||
Since the actual generic type selection is also a type selection, you can select another class with generic parameters and nest them as deep as you need.
|
||||
<div> [[Image:feature-wizard-generictyperec]] </div>
|
||||
You can also select the type <eiffel>TUPLE</eiffel>, which is a special class that can have zero or more generic parameters. When you select it, it has no parameters, but you can add one by clicking on the '''Add parameter''' button. Click it as often as the number of generic parameters that you need.
|
||||
<div> [[Image:feature-wizard-tupletype2]] <br/>
|
||||
</div>
|
||||
{{warning| '''Warning''': if you need a very complex type, it is better not to use the dialog, as the window might grow bigger than your screen. After you completed the feature, edit it manually in the class text. }}
|
||||
|
||||
The code generated for the selected type is quite straightforward, an example:
|
||||
<div> [[Image:feature-wizard-complextype]] <br/>
|
||||
</div>
|
||||
<code>
|
||||
new_feature: FUNCTION [ANY, TUPLE [INTEGER], BOOLEAN]
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
[[Property:title|New feature dialog overview]]
|
||||
[[Property:weight|1]]
|
||||
There are two parts in the window. The upper part allows you to choose what type of feature you want to create, a procedure, a function or an attribute.
|
||||
[[Image:feature-wizard]]
|
||||
The rest of the window is used to set the characteristics of the new feature. Information you will be asked depends on the type you chose. For more information, click on one of the links below:
|
||||
* [[New procedure layout|New procedure layout]]
|
||||
* [[New function layout|New function layout]]
|
||||
* [[New attribute layout|New Attribute layout]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
[[Property:title|New function layout]]
|
||||
[[Property:weight|3]]
|
||||
<div> [[Image:feature-wizard-function]] </div>
|
||||
When clicking '''Function''', the dialog changes to the function layout. It has the following components:
|
||||
* [[Feature clauses|Feature clause selection]]
|
||||
* [[Name field|Feature name field]]
|
||||
* [[Argument list|Argument list]]
|
||||
* [[Type selection|Type selection]]
|
||||
* [[Header comment|Header comment field]]
|
||||
* [[Precondition|Precondition field]]
|
||||
* [[Local variable|Local variable field]]
|
||||
* [[Feature body|Selection for: normal, once, deferred or external routine]]
|
||||
* [[Postcondition|Postcondition field]]
|
||||
|
||||
==Example==
|
||||
<div> [[Image:feature-wizard-function-example]] </div>
|
||||
<code>class
|
||||
PRODUCT
|
||||
|
||||
feature -- Status report
|
||||
|
||||
order_price (quantity: INTEGER): DOUBLE is
|
||||
-- Total price when ordering `quantity'.
|
||||
require
|
||||
quantity_non_negative: quantity >= 0
|
||||
do
|
||||
Result := quantity * price
|
||||
ensure
|
||||
correct: Result = quantity * price
|
||||
end
|
||||
|
||||
end -- class PRODUCT</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
[[Property:title|New procedure layout]]
|
||||
[[Property:weight|2]]
|
||||
<div> [[Image:feature-wizard-procedure]] </div>
|
||||
When clicking '''Procedure''', the window changes to the procedure layout. It has the following components:
|
||||
* [[Feature clauses|Feature clause selection]]
|
||||
* [[Name field|Feature name field]]
|
||||
* [[Argument list|Argument list]]
|
||||
* [[Header comment|Header comment field]]
|
||||
* [[Precondition|Precondition field]]
|
||||
* [[Local variable|Local variable field]]
|
||||
* [[Feature body|Selection for: normal, once, deferred or external routine]]
|
||||
* [[Postcondition|Postcondition field]]
|
||||
|
||||
==Example==
|
||||
<div> [[Image:feature-wizard-procedure-example]] </div>
|
||||
<code>class
|
||||
PRODUCT
|
||||
|
||||
feature {PERSON} -- Element change
|
||||
|
||||
place_order (person: PERSON; quantity: INTEGER) is
|
||||
-- Mail `quantity' to `person'.
|
||||
require
|
||||
person /= Void and quantity > 0
|
||||
do
|
||||
person.mail_order (Current, quantity)
|
||||
ensure
|
||||
person.has_ordered (Current)
|
||||
end
|
||||
|
||||
end -- class PRODUCT</code>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
[[Property:title|Wizards and dialogs]]
|
||||
[[Property:weight|0]]
|
||||
* [[Profiler Wizard|Profiler Wizard]]
|
||||
* [[Dialogs|Dialogs]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
[[Property:title|Profiler Wizard]]
|
||||
[[Property:weight|0]]
|
||||
* [[Profiler wizard: Introduction|Introduction]]
|
||||
* [[Profiler wizard guided tour|Profiler wizard guided tour]]
|
||||
* [[Profiler How To's|Profiler How To's]]
|
||||
* [[Profiler wizard reference|Profiler reference]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
[[Property:title|How to set up a Profiler Configuration File]]
|
||||
[[Property:weight|0]]
|
||||
Once executing an instrumented system has generated the proper file, you must have a profile converter process it in order to produce the Execution Profile. The need for the converter comes from the various formats that profilers use to record run-time information during an execution; a simple Profiler Configuration File enables you to describe the format used by any particular profiler.
|
||||
|
||||
The Profiler Configuration File is a file found in the directory $ISE_EIFFEL/studio/profiler where $ISE_EIFFEL is the location of the Eiffel installation. The name of the Profiler Configuration File in that directory is Eiffel for internal profiling and, for external profiling, the name of the profiler tool as specified in the profiler option. EiffelStudio comes with 3 preconfigured external profilers:
|
||||
* '''gprof:''' GNU's gprof
|
||||
* '''win32_ms:''' Visual C++ 5.0 or 6.0
|
||||
* '''profiler.info:''' Pure Atria's Quantify
|
||||
|
||||
The Profiler Configuration File describes the structure of the file generated by the profiler. To create a new Profiler Configuration File for another profiler, just create a new file in the directory $ISE_EIFFEL/studio/profiler and fill it in.
|
||||
|
||||
Here is a complete example showing the various options that maybe specified:
|
||||
<code>number_of_columns: 7
|
||||
-- Number of columns in the file.
|
||||
|
||||
index_column: 1
|
||||
-- Column where the index is stored.
|
||||
|
||||
function_time_column: 3
|
||||
-- Column where the time spent in the function is stored.
|
||||
|
||||
descendent_time_column: 4
|
||||
-- Column where the time spent in the descendents of a function is stored.
|
||||
|
||||
number_of_calls_column: 5
|
||||
-- Column where the number of calls to a function is stored.
|
||||
|
||||
function_name_column: 6
|
||||
-- Column where the name of the function is stored.
|
||||
|
||||
percentage_column: 2
|
||||
-- Column where the percentage of time spent in the function is stored.
|
||||
|
||||
second_percentage_column: 0
|
||||
-- Column where the second percentage of time spent in the function is stored.
|
||||
|
||||
generates_leading_underscore: no
|
||||
-- Says whether the profiler generates leading underscores (yes) or not (no).</code>
|
||||
|
||||
As in Eiffel, -- introduces a comment, which has no effect on the specification. If one of the xxx_column options has a value of 0, this means that the files generated by the given profiler contain no such column. The order of the options is not significant.
|
||||
|
||||
<br/>
|
||||
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Select a Run-time information record to generate the Execution Profile|Select a Run-time information record to generate the Execution Profile]] <br/>
|
||||
[[Profiling|How to profile a system]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
[[Property:title|Profiler How To's]]
|
||||
[[Property:weight|2]]
|
||||
* [[How to set up a Profiler Configuration File|How to setup a Profiler Configuration File]]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
[[Property:title|Profiler wizard guided tour]]
|
||||
[[Property:weight|1]]
|
||||
# [[Select the Compilation mode|'''First step:''' Select which version of your system you ran using the profiler: Workbench or Finalized]] .
|
||||
# [[Reuse or Generate an Execution Profile| '''Second step (only appears when an ''' ''Execution Profile'' '''has already been generated for this system)''': Select an existing ''Execution Profile'' or choose to generate a new ''Execution Profile'' from a ''Run-time information record''. ]]
|
||||
# [[Select a Run-time information record to generate the Execution Profile| '''Third step (only appears when generating a new ''' ''Execution Profile''''')''': Generate a new ''Execution Profile'' from a ''Run-time information record''. ]]
|
||||
# [[Select the information you need and formulate your query|'''Final step''': Select the information you need and formulate your query.]]
|
||||
# [[Profile query window|Profile query window]]
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Profiler wizard: Introduction|How the Profiler wizard works]] <br/>
|
||||
[[Profiling|How to profile a system]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
[[Property:title|Profile query window]]
|
||||
[[Property:weight|4]]
|
||||
The profile query window displays the results of the query you have formulated in the [[Select the information you need and formulate your query|Final state]] of the Profiler wizard. It also lets you change the sub queries of the current query.
|
||||
|
||||
To add a new sub query to the current query, fill in the text field labeled '''Define new sub query''' (type in ''calls <20'' for example) and click the '''And''' or '''Or''' button. To display the results of the new query click on the '''Update''' button.
|
||||
|
||||
To remove an existing sub query, select it in the '''Active query''' list and click on the '''Inactivate >''' button.
|
||||
|
||||
To activate an existing sub query, select it in the '''Inactive query''' list and click on the '''< Activate''' button.
|
||||
|
||||
To change the operator affecting an existing sub query, select it in either the '''Active query''' or the '''Inactive query''' list and click on the '''Or''' or '''And''' button.
|
||||
|
||||
Click on the '''Save''' button to save the currently displayed results in a text file.
|
||||
|
||||
{{tip| '''Tip''': To visualize the result in Microsoft Excel or any other spreadsheet, select the entire text (except the first three lines where the Execution Profile file is specified), copy it and then paste it into Excel. }}
|
||||
<br/>
|
||||
[[Image:profiler-query-window]] <br/>
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Profiler wizard: Introduction|How the Profiler wizard works]] <br/>
|
||||
[[Profiling|How to profile a system]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
[[Property:title|Reuse or Generate an Execution Profile]]
|
||||
[[Property:weight|1]]
|
||||
The second screen of the wizard lets you reuse a previously generated ''Execution Profile'' or generate a new ''Execution Profile'' from a ''Run-time information record''.
|
||||
|
||||
The profiler wizard has detected that one or more ''Execution Profiles'' have already been generated for this system in this compilation mode. If you have executed your system after the generation of the existing profile, select '''Generate a profile from Run-time information record''' to create a new ''Execution Profile'' for the newly produced ''Run-time information record''.
|
||||
|
||||
{{note| '''Note''': If you choose '''Generate a profile from Run-time information record''' the generated ''Execution Profile'' will be written into ''<project_directory>/EIFGENa/target_name/W_CODE/profinfo.pfi'' if you have selected '''Workbench mode''' in the first step, or ''<project_directory>/EIFGENs/target_name/F_CODE/profinfo.pfi'' if you have selected '''Finalized mode'''. If a file with the same name already exists its content will be destroyed and replaced. }}
|
||||
<br/>
|
||||
|
||||
However, if you have not executed your system since the generation of the last ''Execution Profile'', there is no need to generate a new ''Execution Profile''. If you are in the latter case, select '''Use existing profile''' and choose the last ''Execution Profile'' you have generated.
|
||||
|
||||
{{tip| '''Tip''': If you want to archive different ''Execution Profiles'' (to compare them for example), rename the ''profinfo.pfi'' file into a new name but keep the .pfi extension. The profiler wizard detects existing Execution Profiles by checking the file extensions. }}
|
||||
<br/>
|
||||
[[Image:profiler-wizard-second-state]] <br/>
|
||||
<br/>
|
||||
|
||||
Clicking '''Next''' will lead you to the [[Select a Run-time information record to generate the Execution Profile|Third state]] if you have selected '''Generate a profile from Run-time information record'''. On the other hand if you have selected '''Use existing profile''' you will go to the [[Select the information you need and formulate your query|Final state]] .
|
||||
<br/>
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Profiler wizard: Introduction|How the Profiler wizard works]] <br/>
|
||||
[[Profiling|How to profile a system]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
[[Property:title|Select the Compilation mode]]
|
||||
[[Property:weight|0]]
|
||||
The first screen of the wizard lets you specify the mode in which the profiled system was compiled.
|
||||
|
||||
If you have run a finalized system under the control of the profiler then select '''Finalized mode''' and click '''Next'''. On the contrary if you have executed the system in Workbench mode then select '''Workbench mode''' and click '''Next'''.
|
||||
<br/>
|
||||
[[Image:profiler-wizard-first-state]] <br/>
|
||||
<br/>
|
||||
|
||||
Clicking '''Next''' will lead you to the [[Reuse or Generate an Execution Profile|Second state]] or to the [[Select a Run-time information record to generate the Execution Profile|Third state]] depending on whether an ''Execution Profile'' has already been generated for this compilation mode or not. If no ''Execution Profile'' has been generated so far (which happens the first time you execute this wizard for a specified project in a given compilation mode) you will go to the [[Select a Run-time information record to generate the Execution Profile|Third state]] , otherwise you will go to the [[Reuse or Generate an Execution Profile|Second state]] .
|
||||
<br/>
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Profiler wizard: Introduction|How the profiler wizard works]] [[Profiling|How to profile a system]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
[[Property:title|Select the information you need and formulate your query]]
|
||||
[[Property:weight|3]]
|
||||
The final screen of the wizard lets you select the information you want to be displayed in the profile query window.
|
||||
|
||||
==Select the information you need==
|
||||
|
||||
Check or uncheck any of the check buttons in '''Output switches''' to select the columns you want to be displayed. Each switch turns on or off the corresponding column output. You should toggle columns on or off depending on what you would like to see in the result of the computation. Here are the explanations of each switch:
|
||||
* '''Feature name''': Display the name of the current feature.
|
||||
* '''Number of calls''': Display the number of times the current feature was called during the instrumented execution.
|
||||
* '''Function time''': Display the time spent in the current feature (not counting the time spent in features called by the current feature).
|
||||
* '''Descendant time''': Display the time spent in all features called during the execution of the current feature.
|
||||
* '''Total time''': Display the total time spent in the feature. This value is equal to ''Function time + Descendant time''.
|
||||
* '''Percentage''': Display the percentage of time spent in the current feature. This value is equal to ''Total time / Execution time''.
|
||||
|
||||
Check or uncheck any of the check buttons in the '''Language type''' to select the type of features you want to be displayed. If you select only one language, the query result will not contain any information about routines written in the other language. The default is Eiffel only.
|
||||
* Eiffel features: Display the features written in Eiffel.
|
||||
* C functions: Display the functions written in C.
|
||||
* Recursive functions: Display recursive functions.
|
||||
|
||||
==Formulate your query==
|
||||
|
||||
When running a query, you are able to type a complete query. After pressing the '''Next''' button, a new window will be displayed to show the result of the query. The total query can be either a single one or a set of sub-queries separated by one of the two operators 'or' or 'and'. <br/>
|
||||
<br/>
|
||||
Each sub-query must have the following syntax 'attribute operator value' where:
|
||||
* 'attribute' is one of:
|
||||
** feature name
|
||||
** calls
|
||||
** total
|
||||
** self
|
||||
** descendants
|
||||
** percentage
|
||||
|
||||
* 'operator' is one of: <, >, <=, >=, =, /=, in
|
||||
* 'value' is one of:
|
||||
** An integer (for calls)
|
||||
** A string (for feature name). The string may contain wild card characters: ?, standing for arbitrary characters, and *, standing for arbitrary sub-strings.
|
||||
** A real value (for other attributes)
|
||||
** An interval, of the form a-b for two values a and b.
|
||||
** max
|
||||
** min
|
||||
** avg
|
||||
|
||||
|
||||
<br/>
|
||||
[[Image:profiler-wizard-fourth-state]] <br/>
|
||||
<br/>
|
||||
|
||||
|
||||
Clicking '''Next''' will open the [[Profile query window|Profile query window]] and display the results of the formulated query.
|
||||
<br/>
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Profiler wizard: Introduction|How the Profiler wizard works]] <br/>
|
||||
[[Profiling|How to profile a system]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
[[Property:title|Select a Run-time information record to generate the Execution Profile]]
|
||||
[[Property:weight|2]]
|
||||
The third screen of the wizard lets you generate an ''Execution Profile'' from a ''Run-time information record''. You should provide the ''Run-time information record'' produced by the profiler in the text field labeled '''Run-time information record'''. If the file provided by default is not the desired one change it by clicking on the '''Browse''' button or by directly entering it in the text field.
|
||||
|
||||
Then, in the combo box labeled '''Profiler used to produce the above record''', select the profiler that has been used to produce the ''Run-time information record'' you have entered. If the profiler used to execute the system does not appear in the combo box, you have to add it. See [[How to set up a Profiler Configuration File|How to set up a Profiler Configuration File]] for more details on how to do so.
|
||||
|
||||
{{note| '''Note''': ''The Run-time information record'' has to be located in the ''EIFGENs/target_name/W_code'' directory of your project. }}
|
||||
|
||||
<br/>
|
||||
[[Image:profiler-wizard-third-state]] <br/>
|
||||
<br/>
|
||||
|
||||
|
||||
Clicking '''Next''' will lead you to the [[Select the information you need and formulate your query|Final state]] if the provided ''Run-time information record'' is valid. If the ''Run-time information record'' is not valid or is not located in the ''EIFGENs/target_name/W_code'' directory of the project, you will go to the '''Run-time Information Record Error state''' as shown below.
|
||||
<br/>
|
||||
[[Image:profiler-wizard-rtir-error-state]] <br/>
|
||||
<br/>
|
||||
|
||||
{{seealso| '''See Also''' <br/>
|
||||
[[Profiler wizard: Introduction|How the Profiler wizard works]] <br/>
|
||||
[[Profiling|How to profile a system]] <br/>
|
||||
[[How to set up a Profiler Configuration File|How to set up a Profiler Configuration File]] }}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user