OCamlでスタックトレースを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/145880

  •  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 を使用して環境変数を設定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top