For debugging a faulty function, in addition to the usual trial-and-error method and the "print everything" method, Yacas offers some trace facilities. You can try to trace applications of rules during evaluation of the function (TraceRule(), TraceExp()) or see the stack after an error has occurred (TraceStack()).
There is also an interactive debugger, which shall be introduced in this chapter.
Finally, you may want to run a debugging version of Yacas. This version of the executable maintains more information about the operations it performs, and can report on this.
This chapter will start with the interactive debugger, as it is the easiest and most useful feature to use, and then proceed to explain the trace and profiling facilities. Finally, the internal workings of the debugger will be explained. It is highly customizable (in fact, most of the debugging code is written in Yacas itself), so for bugs that are really difficult to track one can write custom code to track it.
The online manual pages (e.g. ?TraceStack) have more information about the use of these functions.
An example invocation of TraceRule is
In> TraceRule(x+y)2+3*5+4; |
Which should then show something to the effect of
TrEnter(2+3*5+4); TrEnter(2+3*5); TrArg(2,2); TrArg(3*5,15); TrLeave(2+3*5,17); TrArg(2+3*5,17); TrArg(4,4); TrLeave(2+3*5+4,21); Out> 21; |