|
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