See the flow of calls and values of variables
We can see the sequence and depth of calls. From the sandbox for instance:
./test --trace "APP*" --out trace.log
Will give us this in the trace.log:
10:24:30.683662 0x1087f75c0 APPfactorial >APPfactorial Line:10
10:24:30.684335 0x1087f75c0 APPfactorial . N = 6
10:24:30.684372 0x1087f75c0 APPfactorial . >APPfactorial Line:10
10:24:30.684423 0x1087f75c0 APPfactorial . . N = 5
10:24:30.684458 0x1087f75c0 APPfactorial . . >APPfactorial Line:10
10:24:30.684509 0x1087f75c0 APPfactorial . . . N = 4
10:24:30.684545 0x1087f75c0 APPfactorial . . . >APPfactorial Line:10
10:24:30.684595 0x1087f75c0 APPfactorial . . . . N = 3
10:24:30.684631 0x1087f75c0 APPfactorial . . . . >APPfactorial Line:10
10:24:30.684682 0x1087f75c0 APPfactorial . . . . . N = 2
10:24:30.684718 0x1087f75c0 APPfactorial . . . . . >APPfactorial Line:10
10:24:30.684768 0x1087f75c0 APPfactorial . . . . . . N = 1
10:24:30.684806 0x1087f75c0 APPfactorial . . . . . . Ending recursion
10:24:30.684843 0x1087f75c0 APPfactorial . . . . . <APPfactorial
10:24:30.684887 0x1087f75c0 APPfactorial . . . . . Result = 2
10:24:30.684923 0x1087f75c0 APPfactorial . . . . <APPfactorial
10:24:30.684966 0x1087f75c0 APPfactorial . . . . Result = 6
10:24:30.685002 0x1087f75c0 APPfactorial . . . <APPfactorial
10:24:30.685045 0x1087f75c0 APPfactorial . . . Result = 24
10:24:30.685081 0x1087f75c0 APPfactorial . . <APPfactorial
10:24:30.685124 0x1087f75c0 APPfactorial . . Result = 120
10:24:30.685173 0x1087f75c0 APPfactorial . <APPfactorial
10:24:30.685212 0x1087f75c0 APPfactorial . Result = 720
10:24:30.685244 0x1087f75c0 APPfactorial <APPfactorial
We can see the entry into the APPfactorial which is calling itself recursively. Here’s the code:
int APPfactorial(int N){
BAS_FUNCTION(APPfactorial);
BAS_VAR(N);
if (N == 1){
BAS_TRC("Ending recursion");
return 1;
}
int Result = N * APPfactorial(N-1);
BAS_VAR(Result);
return Result;
}
The BAS_FUNCTION macro allows us to see when we enter and exit the function. BAS_VAR shows the variable we want to see in Name=Value format in the trace. BAS_TRC is like a print statement in tracing.