Error Handling & Debugging
Error Handling
At runtime, the Recital/4GL will stop execution display an error message and create an error.mem file whenever an error occurs in the application, unless an alternative error handling procedure has been specified.
The error.mem file includes the following information:
- The Recital Product version, release, platform and compile date information
- System information, such as maximum file size and maximum process stack
- Recital License information
- User and Node names and process ID
- The error number
- The error message
- The program line
- The program line number
- A stack trace of the programs and procedures called
- A list of all active public and private memory variables and classes
- Status of open tables, indexes and current records.
- Settings listing as per LIST STATUS
The error.mem file will be named error.mem and will be overwritten by subsequent errors unless SET ERRORVERSION is ON. If SET ERRORVERSION is ON, multiple numbered error.mem files are created with the following naming format:
error0001.mem
error0002.mem
error0003.mem
The error.mem file(s) will be created in the directory that is current when the error occurs unless the DB_ERRORDIR environment variable/symbol is set. If set, DB_ERRORDIR points to a directory in which the error.mem file(s) will be created.
Alternative error handling procedures can be specified using the ON ERROR command. When there is an active ON ERROR setting, no error.mem file will be created and program execution willl not be halted. It is now up to ON ERROR error handler to trap the information required in order to trace the error and to take appropriate action based on the error that has occurred.
Note: The SAVE ERROR command allows for the creation of an equivalent of the error.mem file. Several functions are available to give information about errors:
FUNCTION | RETURNS |
---|---|
ERRNO() | Operating System Error Number |
ERROR() | Recital 4GL Error Number |
MESSAGE() | Error Message |
MESSAGE(1) | Line which caused the error |
PROCLINE() | Currently executing procedure line number |
PROCNAME() | Currently executing procedure name |
It is important to note that the PROCLINE() and PROCNAME() functions return information about the CURRENTLY executing procedure. If these functions are called from within the error handling procedure, they will give information based on the error handling procedure itself and not the procedure in which the error occurred. They should, therefore, be specified as parameters to the error handler, e.g.
on error do MyErrProc with procname(), procline()
Debugging
In Recital Terminal Developer, the DEBUG command displays a pop-up debugger allowing the specified program to be monitored during execution. The pop-up debugger can also be activated by using the SET STEP ON command. To debug an entire program, issue SET STEP ON before starting. To debug just a particular section of the program, insert the command into the code. The Debugger can be toggled on and off while running your program by means of a hot key procedure, e.g.:
procedure SetStep // set step to opposite of current value set step (!(set([step]))) return procedure DefineKey // set [TAB] as the hot key to call SetStep on key label tab do SetStep return
During the debugging process, the program must be running in interpreted mode, not in compiled mode. The DEBUG command will do this automatically. To ensure that the program is running in interpreted mode when using SET STEP ON/OFF, issue the following two commands before starting program execution:
When running in interpreted mode, a complete history trace of all commands executed can be generated. This requires the use of the SET HISTORY and SET DOHISTORY commands.
Example
set compile off set development off set history on set dohistory on set history to file myhis use demo edit set history to set dohistory off vi myhis.his