Embedded Wizard Studio: Chora Objects window

The Chora Objects window appears when the prototyping session is paused. It provides a view of all currently existing dynamically created objects together with the location where the particular object has been originally created. As such it is useful to get an overview about the object stock and to inspect the contents of existing objects while debugging step-by-step the implementation of your GUI components:

Chora Objects window while debugging an application

Dynamically created objects

Usually, objects are created dynamically with the operator new. However, global entities like autoobjects, bitmap and font resources are also considered as dynamically created instances. They are created automatically on demand just at the moment when they are accessed within the GUI application.

If not used anymore, dynamically created objects are discarded by the automatic garbage collection. An object is considered as not used if there is absolutely no reference the application can use to access the object.

Show the Chora Objects window

The Chora Objects window appears automatically when the running prototyping session is paused. However, if you have previously hidden the window, you can show it again by using the shortcut Alt8 or the menu item WindowChora Objects.

Objects list area

The lower part of the window presents the complete list of all currently existing dynamically created objects. In this area you can evaluate and inspect the object stock:

The list is composed of the following five columns:

Column

Description

Order

The first column displays the order in which the objects have been created at the runtime. Accordingly, objects with lower numbers have been created before all other objects designated with higher numbers.

Object

The second column identifies the particular object uniquely. For more about the here used object name notation see the section object naming.

Class

The third column displays the name of the class used to create the particular object. In fact, the object is considered as an instance of the class displayed here.

RAM

The fourth column displays how much memory (RAM) the Chora object is occupying. This value includes also all embedded objects, if any, and it is expressed in bytes. Please note, the value is estimated without taking in account any optimization aspects. As such it may differ from the memory usage in the real target device. Also, the value does not include the memory needed by Graphics Engine nor strings. It expresses just how much memory the particular Chora object will occupy by itself.

Location

The fifth column refers to the location where the object has been created. This can be either an initialization expression specified in the Inspector or an expression you have implemented in the Code Editor window.

The items within the list are sorted alphabetically according to the column with the currently highlighted caption. By clicking on the caption of another column the sorting will change:

Show embedded objects

Per default, the Chora Objects window shows the dynamically created objects only. If these contain other embedded objects, these are considered as part belonging to the superior dynamically created object and they are not listed separately. This behavior can be modified and you can instruct the Chora Objects window to also list all embedded objects. For this purpose:

Click with right mouse button within the objects list area to open a context menu.

In the context menu select the menu item Include embedded objects.

Thereupon the list is updated showing now all the embedded objects existing within other dynamically created objects. The relation between the embedded and its superior dynamically created object can be seen in the column Order. The embedded objects are created together with their superior object and as such all affected objects have the same order number:

In order to distinguish the embedded from the regular Chora objects, the embedded objects are displayed with gray font. Understanding this difference is particular when you are considering the values in column RAM. Since an embedded object belongs structurally to some superior object, its size (its RAM usage) is already counted in context of this superior object. For example, the screenshot above lists the object @0DE02134 (of class Example::Application) with 12708 bytes RAM usage. This object, however, contains (besides other) the embedded object AttrText with its size 132 bytes. These 132 bytes are already taken in count in the value 12708.

If you want the embedded objects to be removed again from the list of Chora objects, do following:

Click with right mouse button within the objects list area to open a context menu.

In the context menu select again the menu item Include embedded objects to deactivate it.

Variables area

The upper part of the window displays the data members of the object selected currently in the lower objects list. These are variables, properties, arrays and embedded objects. In this area you can inspect the values of the respective data members:

Navigate between areas

You can toggle between the upper and the lower part of the window by using the shortcut CtrlTab.

Inspect objects list

You can navigate in the lower objects list area and inspect the objects listed there. This in turn causes the upper variables area to be reloaded with data members belonging to just selected object:

To navigate in the objects list area use the keys Up and Down.

For every object listed in the objects list area you can additionally inspect the location where the object has been created and the class of the object. The location is shown either in Code Editor or Inspector window. The class, in turn, is shown in Composer window:

To show the location double click on the affected object.

... or press the key ENTER while the object is selected in the list.

To show the object's class click with the right mouse button on the affected object to open a context menu.

In the context menu select the menu item Inspect class.

TIP

If the location where the affected object has been created is unknown, double clicking on the object will result in the Inspect class operation. The location is unknown for objects being created internally by the Prototyper. This is e.g. the actually tested GUI component.

Inspect values

The upper part of the window shows a list with data members and their respective contents. You can navigate in the list and inspect the individual values. Depending on the type of the value, you can also expand it and inspect the contents embedded inside it. For example, you can see the characters of a string:

To navigate in the variables area use the keys Up and Down.

To expand a value just click on the triangle found on the left of the value

... or press the key Right while the affected item is selected.

To collapse a value just click on the triangle found on the left of the value

... or press the key Left while the affected item is selected.

Track changes

The Chora Objects window detects when during debugging the values listed in the variables area are modified and highlights automatically the affected items with green color. This color fades out with time allowing you to simply distinguish which value has changed recently:

Object naming

Depending on the parentage of an object the Chora Objects window uses different notations to identify it:

If the object was created dynamically by using the new operator, then the object is identified by a unique 32-bit hexadecimal number starting with the @ (at) sign. As long as the object exists this number remains valid:

In turn, a globally existing autoobject is identified by the name of the unit containing the respective autoobject and the name of the autoobject itself starting with the @ (at) sign. For example, the autoobject Example::PowerSupply is shown in the Chora Objects window as follows:

Bitmap and font resources are identified similarly with the additional language variant name, separated by a _ (underscore) sign. For example, the instance of the bitmap resource Steel::PanelBack in its default language variant is shown in the Chora Objects window as follows:

An embedded object is identified by its name you have originally specified in the implementation. If an object is nested inside another object, it is identified by the complete path composed of all affected object names and separated by the . (dot) sign:

Memoryless properties

The variables area of the Chora Objects window displays only the contents stored within the memory associated to the listed data members. This can be confusing when the affected member is a property implementing its own onget method. When you inspect a property in the Chora Objects window the code of such onget methods is never executed in order to avoid potential interferences with the debugged application.

The Chora Objects window limits to show what the memory behind the property does contain. This can in fact differ from the value calculated dynamically by the onget method of the affected property.

Hide the window

The Chora Objects window disappears automatically as soon as the prototyping session is resumed or terminated. If desired however, you can hide this window temporarily and so uncover the screen areas lying behind it.

To hide all debugging windows press the key F6

... or select the menu item WindowShow hide debugger windows.

To show the windows again simply repeat this operation.