10

OCaml で現在のコール スタックをプログラムで取得する方法はありますか? これは、デバッガー内ではなく、現在の呼び出しスタックを出力するプログラム内の関数呼び出しとして意味します。特にデバッグシンボルが利用できる場合、これはバイトコードインタープリターの能力を超えてはならないはずだと思います。

4

4 に答える 4

9

私は同じことを探してこの質問に来ました、これが私の解決策です

Printexc.get_callstack 5 |> Printexc.raw_backtrace_to_string

(実際には、新しいコードベースに慣れるためのかなり良い方法です)

于 2015-06-29T18:57:00.563 に答える
1

バイトコードでコンパイルされたコードを開始できる ocamldebug を使用することもできます。この環境では、Printexc.get_backtrace() ははるかに完全です。

于 2012-09-03T10:12:19.943 に答える
0

残念ながら、コード内からバックトレースを取得する唯一の方法は、例外が発生したときに Printexc.get_backtrace () を使用することです。OCamlがそれらを回復できた場合にのみ、関数の名前、スタック内のコード内の場所のみを提供します...

于 2012-08-13T07:42:48.073 に答える
0

ネイティブ コードの場合、glibc のbacktraceを使用できますが、すべてのスタック フレームが正しく出力されない場合があります。

于 2012-08-13T07:17:22.760 に答える