I'm trying to get the backtrace of function calls. I wonder if anyone knows how to do that in the toplevel.
Asked
Active
Viewed 382 times
1 Answers
4
#trace
directive is useful to trace functions, e.g.,
# let rec f x = if x > 0 then f (x - 1) else "done";;
val f : int -> string = <fun>
# #trace f;;
f is now traced.
# f 12;;
f <-- 12
f <-- 11
f <-- 10
...
To trace several functions, use #trace for all of them, e.g.,
#trace f;;
#trace g;;
Do not forget, that after you redefined a function, you need to invoke #trace
again, since from the toplevel perspective this is a new function, although it has the same name.
To untrace function f
use #untrace f
, to untrace all functions, that are currently traced use #untrace_all
Also, you may find useful Printexc.get_callstack
function, that, if you enabled trace recording with Printexc.record_bactrace true
, will show you current call stack.

ivg
- 34,431
- 2
- 35
- 63