Errcap


13!:0 ]2
Error Capture
initial writing: 2000-08-02
last updated: 2004-10-26



The debug mode 13!:0 now accepts 2 as an
argument. 13!:0 ]1 enables error suspension.
13!:0 ]2 does not permit error suspension;
instead, where suspension would have happened,
the following phrase is executed:

    STACK_ERROR_INFO_base_=:  (13!:11 ; 13!:12 ; 13!:13 ; 18!:5) ''

capturing the error number, error text, stack info, and current locale name.
The stack is then cleared, and execution goes into
immediate execution.


Unlike 13!:0 ]1 error suspension, 13!:0 ]2 error capture
does not require a professional key (9!:31).


Example 0:
After an error is encountered in executing 8 foo 'boo boo',
there is no indication of anything untoward, nor is there an error suspension.
However, STACK_ERROR_INFO_base contains the error number,
error text, and stack information at the time of the error.

   foo=: 4 : 0
    t=. 6!:0 ''
    x. plus y.
   )
   plus=: 17&|@+
   13!:0 ]2
   8 foo 'boo boo'
   STACK_ERROR_INFO
+-+------------------------------+-------------------------------------------- ...
|3||domain error: plus |plus[:0] |+----+-+-+-+-------------------------------- ...
| |                              ||plus|3|0|3|17amp;|@+                           ...
| |                              ||    | | | |                                 ...
| |                              ||    | | | |                                 ...
| |                              |+----+-+-+-+-------------------------------- ...
| |                              ||foo |0|1|3|4 : 0  t=. 6!:0 ''  x. plus y. ) ...
| |                              ||    | | | |                                 ...
| |                              ||    | | | |                                 ...
| |                              ||    | | | |                                 ...
| |                              ||    | | | |                                 ...
| |                              ||    | | | |                                 ...
| |                              ||    | | | |                                 ...
| |                              |+----+-+-+-+-------------------------------- ...
+-+------------------------------+-------------------------------------------- ...
   q=: STACK_ERROR_INFO_base_
   $q
4
   $&.>q
++--+---++
||30|2 8||
++--+---++
   >0{q
3
   >1{q
|domain error: plus
|plus[:0]
   0 2 4 6 7{"1 >2{q
+----+-+--------------------------------+-----------+---------------------------+
|plus|0|17&|@+                          |+-+-------+|                           |
|    | |                                ||8|boo boo||                           |
|    | |                                |+-+-------+|                           |
+----+-+--------------------------------+-----------+---------------------------+
|foo |1|4 : 0  t=. 6!:0 ''  x. plus y. )|+-+-------+|+--+----------------------+|
|    | |                                ||8|boo boo|||t |2000 11 30 9 21 54.811||
|    | |                                |+-+-------+|+--+----------------------+|
|    | |                                |           ||x.|8                     ||
|    | |                                |           |+--+----------------------+|
|    | |                                |           ||y.|boo boo               ||
|    | |                                |           |+--+----------------------+|
+----+-+--------------------------------+-----------+---------------------------+

Example 1: The latent expression (9!:29), executed on
return to immediate execution, can be used to capture any stack error
information.

   errcap=: 3 : 0
    (3!:1 STACK_ERROR_INFO_base_) 1!:2 <":6!:0 ''
    1!:2&2 'STACK_ERROR_INFO written to file'
   )
   9!:27 'i.0 [ errcap 0'       NB. set latent expression
   3 foo 'boo boo' [ 9!:29 ]1   NB. enable latent expression
STACK_ERROR_INFO written to file