Objective Caml 언어는 바이트 코드와 네이티브 코드에 대한 요구 사항이 무엇인지 정확하게 묻는 경우에만 스택 추적을 생성합니다. -g 및 설정 환경 변수 OCAMLRUNPARAM와OCaml에서 스택 추적을 얻으려면 어떻게해야합니까?
23
A
답변
34
컴파일은 = B
9
2
유닉스에서 예외에 대한 흔적 만 얻을 수있는 것처럼 보이기 때문에 두 번째 프로세스에서 예외를 포크하고 throw 할 수 있습니다. 주요 프로세스가 계속 이런 식으로 :
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
0
당신이 Ocamlbuild 사용하는 대신 직접 컴파일러를 호출하는 경우 debug
태그를 사용할 수 있습니다. manual에서 : OCamlbuild와
, 당신은 단순히 프로그램의 목표에 디버그 태그를 추가 할 수 있으며, -g 플래그를 삽입하거나하지 않을 때 분류됩니다. 당신이 패키지
bar
있는 파일foo.ml
을 구축하는 경우
예를 들어, 다음 _tags
파일은 라인이있을 것이다 :
<foo.ml>: package(bar), debug
바이트 코드/원시 파일을 구축하는 동안이 적절한 -g
플래그를 삽입합니다. 그러나 다른 대답에서 언급 한대로 export OCAMLRUNPARAM=b
을 사용하여 환경 변수를 설정해야합니다.
원시 코드의 경우 OCaml v3.10 이상에서만 작동합니다. –