関数呼び出しのバックトレースを取得しようとしています。トップレベルでそれを行う方法を誰かが知っているのだろうか。
1 に答える
4
#trace
ディレクティブは、関数をトレースするのに役立ちます。たとえば、
# 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
...
複数の関数をトレースするには、それらすべてに #trace を使用します。
#trace f;;
#trace g;;
関数を再定義した後、再度呼び出す必要があることを忘れないでください。#trace
トップレベルの観点からは、これは同じ名前ですが新しい関数であるためです。
関数のトレースを解除するには をf
使用#untrace f
します。現在トレースされているすべての関数のトレースを解除するには、次を使用します#untrace_all
Printexc.get_callstack
また、でトレース記録を有効にするとPrintexc.record_bactrace true
、現在のコール スタックが表示される便利な機能が見つかる場合があります。
于 2015-04-15T12:14:27.807 に答える