HandleError
Overview
HandleError offers a method Process which is useful to handle application errors on a general level.
It has the following goals:
Create a namespace #.Crash and populate it with variables providing all sorts of information potentially important for analyzing the error. This namespace is also saved in a component file by default. This is mainly for application that cannot save an error workspace because threads are used.
- Creates an HTML page with essential information regarding the error.
Attempt to save an error workspace. In order to achieve that all running threads are killed; the main thread will always survive anyway. All options can be changed by setting variables in the namespace returned by CreateParms which can be passed as right argument to the main function Process. For defaults just pass an empty vector to Process.
You can make Process execute your own code by specifying these two names:
logFunction is supposed to be the name of a monadic function that returns a shy result. The right argument is expected to process simple strings as well as vectors of strings.
customFns is supposed to be the name of a monadic function that returns a shy result. It can be used to do anything you like. The right argument is the namespace with the configuration settings, as returned by CreateParms. A typical application for this is sending an email to notify certain users about the crash.
Examples
This example sets error trapping for an application so that HandleError.Process uses defaults (empty right argument)
⎕TRAP←(405 'E' '406 #.HandleError.Process ⍬')
This example calls HandleError.CreateParms in order to create a command namespace and then modifies some of them. Note the usage of ⎕SHADOW in order to make sure that the ⎕TRAP statement can always "see" the right argument: it's kind of a global but at the time local in the sense that it will disappear when the application finishes.
#.⎕SHADOW'HandleErrorParms' #.HandleErrorParms←#.HandleError.CreateParms #.HandleErrorParms.∆List addToMsg createHTML 1 customFns errorFolder Errors\ logFunction off 1 returnCode 1 saveCrash 1 saveErrorWS 1 signal 0 trapInternalErrors 1 windowsEventSource ⎕TRAP←(405 'E' '406 #.HandleError.Process #.HandleErrorParms')
By editing or ⎕CRing the following function you can see what
⎕CR '#.HandleErrorParms.∆Reference'
That would result in something similar to this:
- createHTML
- Boolean that defaults to 1. A 0 suppresses the creation of the HTML file
- customFns
- Fully qualified name of a monadic function to be executed by "Process". Useful to send an email, for example.
- errorFolder
- Folder that keeps the component file (crash), the HTML page and the error WS
- logFunction
- Name of the logging function to be used
- off
- By default this function executes ⎕OFF with ""returnCode"" when in Runtime. A 0 suppressed this.
- returnCode
- The return code passed on to ⎕OFF
- saveCrash
Boolean that defaults to 1. A 0 suppresses the creation of #.Crash & a component file saving this NS
- saveErrorWS
- Boolean that defaults to 1. A 0 suppresses the creation of crash
- sendEmailTo
- List of comma-separated email addresses to be notified regarding the crash. Ignored when empty.
- signal
- When "off" is 0 and "signal" is not 0 then "signal" is signaled by "Process". Can be used for a restart attempt.
- trapInternalErrors
- By default all internal errors are trapped: "Process" should never crash in an app.
- windowsEventSource
- Name of the Windows Event Log to write to. Ignored when empty.
- addToMsg
- Will be added to log file entries as well as Windows Event Log messages. Mainly for test cases
Project Page
For bug reports, future enhancements and a full version history see HandleError/ProjectPage
Version Information
Original author: |
|
Responsible: |
|
Email: |
HandleError needs version 13.0 of Dyalog APL.