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 four 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.

Location

The fourth 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. If an object has been created implicitly by the prototyping environment, this column will remain empty since there is no corresponding location in your implementation. This applies primarily to objects created just at the initialization time of the prototyping session and to all event objects created in response to user interactions within the Prototyper 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:

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. The location is shown either in Code Editor or Inspector window:

To show the location double click on the affected object

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

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.