This will call TraceScan
and save each line (WriteLine
) to a text file.
A time-out can be defined (default 1 minute), and the function returns a clickable File
for seamless opening.
ClearAll[TraceToFile]
SetAttributes[TraceToFile, HoldFirst]
TraceToFile[expr_, filename_String, timeout_: 60] := With[
{
file = OpenWrite[filename]
},
Echo[timeout, "Timeout: "];
Echo[FileNameJoin[{Directory[], filename}], "File: "];
Echo[ToString[Hold[expr], InputForm], "Expresion"];
TimeConstrained[
TraceScan[
WriteLine[
file,
StringTake[ToString[#, InputForm], {10, -2}]
] &,
expr
], timeout];
Close[file];
File[FileNameJoin[{Directory[], filename}]]
]
Example
fib[0] = fib[1] = 1; fib[n_] := fib[n - 1] + fib[n - 2];
First@AbsoluteTiming[TracePrint[fib[12]]]
(* 20.8437 *)
First@AbsoluteTiming@TraceToFile[fib[12], "TraceTest.txt"]
(* 0.320829 *)

