Debugging in Yacas
Introduction
When writing a code segment, it is generally a good idea to separate the
problem into many small functions. Not only can you then reuse these
functions on other problems, but it makes debugging easier too.
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()).
The trace facilities
The trace facilities are:
- TraceExp : traces the full expression, showing all calls to user- or system-defined functions, their arguments, and the return values. For complex functions this can become a long list of function calls.
- TraceRule : traces one single user-defined function (rule). It shows each invocation, the arguments passed in, and the returned values. This is useful for tracking the behaviour of that function in the environment it is intended to be used in.
- TraceStack : shows a few last function calls before an error has occurred.
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;
|