OCamlでスタックトレースを取得するにはどうすればよいですか?
-
02-07-2019 - |
質問
Objective Caml言語は、スタックトレースを適切に要求した場合にのみスタックトレースを生成します。バイトコードとネイティブコードの両方の要件は何ですか?
解決
-gでコンパイルし、環境変数OCAMLRUNPARAM = bを設定します
他のヒント
一部の Printexc 関数を使用すると、プログラムでこれを実行できます。
Unixでは例外のトレースしか取得できないように見えるため、2番目のプロセスで分岐して例外をスローできます。これにより、メインプロセスを続行できます。
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
コンパイラを直接呼び出す代わりにOcamlbuildを使用している場合は、 debug
タグを使用できます。 からマニュアル:
OCamlbuildを使用すると、プログラムのターゲットにデバッグタグを追加するだけで、-gフラグを挿入するかどうかを整理できます。
たとえば、パッケージ bar
でファイル foo.ml
を構築している場合、 _tags
ファイルには次の行があります。
<foo.ml>: package(bar), debug
これにより、バイトコード/ネイティブファイルの構築中に適切な -g
フラグが挿入されます。ただし、他の回答で説明されているように、 export OCAMLRUNPARAM = b
を使用して環境変数を設定する必要があります。
所属していません StackOverflow