Debug Code

Insert breaks

->'break line'

Trace errors

)trace or )TRACE is designed for printing error messages after a runtime error occurs.

//after an error occurs
)trace
//if more lines should be printed
)trace 50

An example

Add a break line ->'stop after while' into the script TSORT.esf under the ws folder.

@.Z<-TSORT G;N;ML
L<-!0
S<-(0=+/.G)/GL<-!1^.#G
while(0<#S){
L<-L,N<-S[1]
S<-1!.S
ML<-G[N;]/GL
G[N;ML]<-0
S<-S,(0=+/.G[;ML])/ML
}
->'stop after while'
if(0<+/+/G)Z<-'Graph G is not a cyclic'
else Z<-L
@.

After the script is saved, it can be executed in interpreter environment.

  • TSORT G triggers an error, then the program is terminated.
  • )TRACE prints the error messages as follows.
          )fload tsort
saved 2015.11.19 00:32:06 (gmt-5)
          TSORT G
stop after while
Error:
TSORT[12]  ->'stop after while'
             ^
          )TRACE
name[ 100]: TSORT
total lines:  18 step    line  content
[  53]  [  5]  S<-1!.S
[  54]  [  6]  ML<-G[N;]/GL
[  55]  [  7]  G[N;ML]<-0
[  56]  [  8]  S<-S,(0=+/.G[;ML])/ML
[  57]  [  9]
[  58]  [ 10]  ->L0
[  59]  [  3]  L0:->(~0<#S)/L1
[  60]  [  4]  L<-L,N<-S[1]
[  61]  [  5]  S<-1!.S
[  62]  [  6]  ML<-G[N;]/GL
[  63]  [  7]  G[N;ML]<-0
[  64]  [  8]  S<-S,(0=+/.G[;ML])/ML
[  65]  [  9]
[  66]  [ 10]  ->L0
[  67]  [  3]  L0:->(~0<#S)/L1
[  68]  [ 11]  L1:
[  69]  [ 12]  ->'stop after while'
--trace--version--0.02a--