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 HelpHelp Contents) 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:

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:

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 Skip (German Überspringe Anweisung) from the Debug menu,
  • with the command Skip (German Anweisung überspringen) from the context menu of the Rule Display.

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.

Figure 19-6: Query when loading a very large trace file

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:

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

(new)

This attribute defines the file with the private key used for the SSH protocol.

 

Identifier

Data Type

Rule Language

.privatekeyfile

string

C

AT_privatekeyfile

DT_string

COBOL

AT-privatekeyfile

DT-string

Classification

object-specific attribute

Objects

application

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

(new)

This attribute defines the file with the public key used for the SSH protocol.

 

Identifier

Data Type

Rule Language

.publickeyfile

string

C

AT_publickeyfile

DT_string

COBOL

AT-publickeyfile

DT-string

Classification

object-specific attribute

Objects

application

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]

(enhanced)

 

Identifier

Data Type

Rule Language

.options[enum]

boolean

C

AT_options

DT_boolean

COBOL

AT-options

DT-boolean

Index data type

enum

Classification

object-specific attribute

Objects

application

Access

get, set

Default value

changed event

yes

Inheritance

yes

The application object provides the following additional options for an SSL connection.

20.5.1.4 Command Line Option -IDMssl_options

(new)

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.

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.

Note on the Command Line Option +writetrampolin

The file extension of the generated COBOL files is now .cbl if one of the COBOL command line options ufcob, -mfviscob or -mfviscob-u is specified. If none of these COBOL options are specified, the file extension remains .cob.