/
See the flow of calls and values of variables

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.

Related pages