3

関数呼び出しのバックトレースを取得しようとしています。トップレベルでそれを行う方法を誰かが知っているのだろうか。

4

1 に答える 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 に答える