20 A.06.02.h
20.1 Compatibility
The binary format has changed. Binary files have to be regenerated.
The network protocol has changed, older versions are no longer compatible with this version.
The trampoline modules for COBOL have to be regenerated.
20.2 Windows
IDM-12931: When linking an IDM application, there could be many warnings about missing PDB files. This should no longer occur, since now all projects in the release configuration are built without debug information.
Fixed: The distribution packages now again contain the correct, current version of the application serial.exe. With some IDM versions, an outdated serial.exe caused the installation to fail due to a supposedly invalid license key.
New: The IDM documentation is now also available as Eclipse Help Plugin
for use with the Eclipse Help System.
Compared to the HTML documentation of the IDM, the IDM Help Plugin does not contain any PDF documents. Furthermore, the Installation Guide
and the manuals for the IDM tools (Editor, Debugger, Profiler, Tracefile Analyzer) are not included in the IDM Help Plugin.
Installation of the IDM Help Plugins
Copy the file de.isa.idmdoc.eclipseplugin_<version>.jar supplied with the IDM from the directory <IDM-Installationsverzeichnis>\doc\eclipse into the sub-directory dropins
or plugins
of Eclipse. Delete a possibly existing IDM Help Plugin with older version number.
The next time Eclipse is started, the entry ISA Dialog Manager Documentation
will be available in the Eclipse Help System (menu command ) under Contents on the left, and context-sensitive information from the IDM Help Plugin will be displayed in the Help View as Related Topics and in tooltips.
20.3 Core
IDM-13003: The internal destroying of child objects in a control object is now synchronized with the destroying of the control object. Therefore, no more assfails
should occur during the finish event or destroy of a control object with children.
IDM-12998: An :init() method for object initialization is now also carried out if :create() is called recursively within an :init() method after there has already been a call to :super().
IDM-12989: When loading the interface file of modules with an export use, the use respectively import information is now built up without errors, so that the module imported via export use is recognized correctly and no more cannot resolve label errors occur.
IDM-12988: Multiple, same use statements in complex, modularized dialogs no longer cause an endless loop during starting and ending.
IDM-12987: The Model path of an inherited, hierarchical child will now be correctly written out binary by ‑compile as a complete, absolute path.
IDM-12962: In the error message Module file <> not found, the name of the Use Path is no longer faulty or empty.
Fixed: Due to a change with the Use Path, it might happen that despite ‑buildersetdirty being set, files were not reloaded by the Builder Process and modules were therefore not built. This issue has been resolved.
Fixed: The Builder Protocol has been extended to pass the -writeonchange option to the Builder Process. Previously, the option was only set at the start of the Builder Process.
Fixed: The Builder Protocol has been extended to pass the COBOL type to the Builder Process. Previously, the options for the COBOL type were only set at the start of the Builder Process.
Fixed: In the language definition file idmlangdef.xml for the IDM Eclipse Plugin, missing methods, attributes, font modifiers and the identifiers for the grid factors of fonts have been added.
Changed: In the memory management for the parse tree the memory unit was changed from char to long, so that now 4 or 8 times 64kB are possible and the error message rule exceeds internal size should appear less often.
New: For the context help of the IDM Eclipse Plugin, names for symbols have been added to the language definition file idmlangdef.xml.
20.3.1 Checking the Usage of Local Variables
As part of the error analysis, there are additional checks for unused local variables or for variables that were not correctly initialized or set before use.
The aim of these checks is to identify possible errors before execution. The checks are based on the following assumptions:
- In principle, there should be read and write access to a variable, otherwise it is
useless
. - If read access occurs before write access, an error is assumed.
For the problem spots found, warnings of the kind *** Warning in… with details about the problem are output. Loading is not canceled.
The following applies to the checking of variables:
- The checks only apply to local variables and parameters. There are no checks for global variables.
- The objective is the detection of unused local variables, the use of uninitialized variables and the missing setting of output parameters.
- input parameters or input output parameters are
initialized
by themselves, an uninitialized access cannot be determined here. A missing read access is only detected for pure input parameters if there are only write accesses in a rule. - For a dynamic object, method or rule reference, the call signature cannot be determined. This may lead to warnings because the input or output property of the arguments cannot be determined. For parameters, the input property will then be assumed. For method calls it is therefore recommended to use object variables with validity range (model reference) or to initialize the local variables.
- For branches or conditions, it is not possible to determine which execution path will be run through. There is no value propagation or calculation. Therefore, it is recommended to initialize variables or set them in every possible execution path.
- In loops with for and foreach, there is no implicit, supposed reading access to the control variable in order to detect a missing usage.
- For an indexed access, it is not possible to determine whether the index value is set or initialized.
- Side effects of instructions are not taken into account for variable evaluation. For example, a method call in a variable initialization can make sense, but the variable may still be considered as
never used
.
Error Text Error Name |
Cause Remedy |
---|---|
Variable is not initialized DME_VarNotSet |
The local variable is not set or initialized prior to being used. Initialize the variable at its declaration or set it in a previous statement. |
Variable is never used DME_VarNotUsed |
The local variable is defined and may also be initialized. But there is no further access to the variable value. Remove or use (read) the variable. |
Output argument never set DME_OutArgNotSet |
The output parameter is not set in a rule. Incorporate an assignment to the output parameter. |
Output argument maybe never set DME_OutArgMayNotSet |
In a branched control flow witih a rule, the output parameter is not set in all execution paths. It may well happen that a path without value assignment is run through during rule execution. Set the output parameter in all execution paths. |
Variable maybe used uninitialized DME_VarMayUnset |
In a branched control flow witih a rule, the variable is not set in all execution paths. It may well happen that a path without value assignment is run through during rule execution. Initialize variable or set it in all execution paths. |
Variable is never read DME_VarNotRead |
A local variable is set but never read. Add missing access. |
Example
This example illustrates which problems are detected for the usage of variables and the limits of detection.
dialog D rule void Rule( integer ParI, // no Warning integer ParIO input output, // no Warning integer ParO output) // Warning: Output argument never set { ParIO := ParI; } record Rec { rule void Method(integer ParI, integer ParO output) { ParO := ParI; } rule void Method2( integer ParI) // Warning: Variable is never read { ParI := 2; // only read access ParI := 3; // to input parameters } } on dialog start { variable integer Var1; // Warning: Variable is never used variable integer Var2 := 0; // Warning: Variable is never used variable integer Var3; variable integer Var4; // Warning: Variable is never read variable integer Var5; variable integer Var6; variable integer Var7; variable integer Var8; variable integer VarI; // Warning: Variable is never read variable object O := null; variable object[Rec] R := null; if random(10) > 10 then // variable not set in Var3 := 3; // each execution path R := Rec; else O := Rec; endif print Var3; // Warning: Variable maybe used uninitialized Var4 := 4; Rule(Var5, Var5, Var6); // Warning: Variable is not initialized Var4 := Var4 + Var6; // call signature not recognizable - input is assumed O:Method(Var4, Var7); // Warning: Variable maybe used uninitialized R:Method(Var4, Var8); // call signature recognizable Var4 := Var4 + Var8; for VarI := 1 to 5 do // loop without usage of control variable endfor exit(); }
20.3.2 Deactivating Messages from Error Analysis
The notification of errors, which are detected by the advanced error checks, can be controlled by the user. For this purpose, the command line option -IDMdisable_error=<errorname> can be used, which may be specified as an argument multiple times.
Here <errorname> is a DME_ error name from the file IDMuser.h, where DME_
may be omitted for simplicity.
Deactivating errors related to the validity check is not possible.
Example
With the command line option -IDMdisable_error=VarMayUnset the output of the error message Variable maybe used uninitialized can be suppressed.
20.4 Debugger
IDM-13001 and IDM-12997: The Rule Browser will now be hidden during loading to speed up loading times and avoid its flickering while loading dialogs with many modules. Also to speed up loading times, the management of the rule list has been optimized and the number of calls between IDM and Debugger when loading modules has been reduced.
Also, the user interface is now unlocked again after displaying an error message.
IDM-12996: Reconnecting a dialog to the separately started Debugger will no longer cause crashes due to internal inconsistencies in releasing and locking the user interface for the user. These inconsistencies could lead to the impression that user actions were possible even though the debugger had not stopped. Furthermore, there should be no more crashes after a stop command.
Also, the user interface is now unlocked again after displaying an error message and after toggling Autostop
or Errorstop
.
IDM-12990: Breakpoints are now reliably set to the requested line or the next line with a break opportunity. Previously, crashes during debugging could happen because breakpoints were moved to invalid places.
IDM-12959: In the Tracefile Analyzer, the scroll position is now retained if a line is selected while a filter is active and the filter is then deactivated. The scroll position is no longer reset to the beginning of the file, which means that it is not necessary to search for the selected position anymore.
IDM-12890: Index number values with three digits are no longer incorrectly interpreted as Tracetime by the Tracefile Analyzer.
IDMDBG-92: The command Next
(Step Over
, F6 in the IDM Debugger Plugin) now jumps to the correct position again if there are annotations (!! comments) before a rule or method call.
In addition, multi-line annotations are displayed completely in the Code View again.
IDMDBG-91: Breakpoints in lines after a return statement are no longer incorrectly moved to the end of the rule.
Fixed: In the Tracefile Analyzer for Microsoft Windows, the yellow mark of the selected line is now retained even if it is scrolled so far to the right that no more characters are displayed in this line.
Fixed: The display of the Tracefile Analyzer on Microsoft Windows is now updated when the window is widened and the first character to be displayed on the left changes. As a result, there are no more subsequent errors, for example, that it was no longer possible to scroll to the left.
Fixed: In the Tracefile Analyzer for Microsoft Windows, several scrolling issues have been fixed and discrepancies between display and scrollbar position have been eliminated.
New: In the Debugger, the current statement can now be skipped without executing it.
The current statement can be skipped during debugging as follows:
- with the keyboard shortcut Shift + F10,
- with the command (German ) from the menu,
- with the command Rule Display. (German ) from the context menu of the
20.4.1 Partial Loading of Very Large Trace Files in the Tracefile Analyzer
When you open a trace file that is too large to be loaded completely with the Tracefile Analyzer, the dialog box Load Options is shown in which you can decide how to proceed.
The value in the input field Load Size specifies how much of the trace file should be loaded.
The radiobuttons Beginning and Tail determine, which part of the trace file is loaded.
With Apply the specified part of the trace file is loaded.
Cancel aborts loading the trace file.
If a file is loaded only partially, information about the loaded subrange is displayed in the Map Range row of the Info Area.
When loading the end of a file, the loaded part may begin somewhere in the middle of a trace line and the line numbering starts with 1 at the first loaded line.
Note
The Tracefile Analyzer supports loading files larger than 2 GB on 32- and 64-bit systems. However, the size up to which a file can actually be loaded depends on several factors, such as the addressable or allocatable memory, the number of lines, and others.
The following upper limits apply:
- Number of lines: 2 billion.
- File size: 4 GB on 32-bit systems, larger files are possible on 64-bit systems.
-
Memory requirement: The upper threshold is the addressable working memory, but note that the Tracefile Analyzer allocates additional memory for managing the trace structure and line information.
The prompt for partial loading appears if the file cannot be completely mapped into the working memory or if the heuristically determined memory requirement for trace structure and line information is greater than 500 MB.
20.5 DDM (Network)
Fixed: SSL can now also be initialized on Unix with older OpenSSL versions in which SSL_CTX_set_options is not defined as a function but as a macro. The macro is used if it is defined, otherwise the function will be loaded.
Fixed: On Windows, SSL now also works in ‑IDMserve mode. The ‑IDMtransport option is now correctly copied into the argument vector for the sub-process.
Fixed: The ‑IDMserve mode now also works on Windows again. Previously, copying the argument vector was canceled because additional arguments for the network protocol were added, which were not removed from the argument vector although being set to NULL while parsing.
20.5.1 New Attributes and Options for SSL and SSH
For the support of SSL and SSH, at the application object the attributes .publickeyfile and .privatekeyfile as well as the options opt_verify_peer, opt_cert_required and opt_no_ssl_v2 for the .options[enum] attribute and a corresponding command line option have been added.
20.5.1.1 Attribute .privatekeyfile
(ne
This attribute defines the file with the private key used for the SSH protocol.
Identifier |
Data Type |
||
---|---|---|---|
Rule Language |
.privatekeyfile |
string |
|
C |
DT_string |
||
COBOL |
DT-string |
||
Classification |
object-specific attribute |
||
Objects |
|||
Access |
get, set |
Default value |
– |
changed event |
yes |
Inheritance |
yes |
By default, the file private.pem from the installation directory of the application is used.
20.5.1.2 Attribute .publickeyfile
(ne
This attribute defines the file with the public key used for the SSH protocol.
Identifier |
Data Type |
||
---|---|---|---|
Rule Language |
.publickeyfile |
string |
|
C |
DT_string |
||
COBOL |
DT-string |
||
Classification |
object-specific attribute |
||
Objects |
|||
Access |
get, set |
Default value |
– |
changed event |
yes |
Inheritance |
yes |
By default, the file public.pem from the installation directory of the application is used.
20.5.1.3 Attribute .options[enum]
(
Identifier |
Data Type |
||
---|---|---|---|
Rule Language |
.options[enum] |
boolean |
|
C |
DT_boolean |
||
COBOL |
DT-boolean |
||
Index data type |
enum |
||
Classification |
object-specific attribute |
||
Objects |
|||
Access |
get, set |
Default value |
– |
changed event |
yes |
Inheritance |
yes |
The application object provides the following additional options for an SSL connection.
-
Indicates whether the opposite side should be verified.
-
Determines whether a certificate is required.
-
Specifies that version 2 of the SSL protocol is not used.
20.5.1.4 Command Line Option -IDMssl_options
(ne
This command line option is used to configure the SSL connection on the application side. The following options can be specified separated by comma, semicolon or space. At least one of the options has to be specified.
-
Indicates whether the opposite side should be verified.
-
Determines whether a certificate is required.
-
Specifies that version 2 of the SSL protocol is not used.
This command line option is only supported on the application side.
20.6 COBOL
IDM-13007: The dynamic binding of COBOL functions (BindThruLoader functionality) works again. When this functionality is enabled, the function type is now defined so that the functions are called again.
With the functions DM_BindCallbacks() and DM_BindFunctions(), the new internal option DMF_FC_RecordStub is used in the trampoline module to indicate that the specified function pointer references a stub function in the C programming language.
Several pitfalls
with dynamic binding of record functions (option +writeheader) are now recognized and a function whose binding does not match the call option is not called.
Fixed: With the dynamic binding of record functions (option +writeheader) on the 64-bit version of Windows, crashes due to a faulty structure of the call stack no longer occur.
New: Generally .cob
was used as extension for COBOL source files. Micro Focus Visual COBOL uses .cbl
by default. Now .cbl
is used as extension if one of the options for Micro Focus COBOL (-ufcob, -mfviscob or -mfviscob-u) is used.