Pregunta

El lenguaje de Objective Caml solo producirá trazas de pila si las solicita de forma correcta. ¿Cuáles son los requisitos tanto para el código de bytes como para el código nativo?

¿Fue útil?

Solución

Compile con -g y establezca la variable de entorno OCAMLRUNPARAM = b

Otros consejos

Algunas funciones de Printexc te permiten hacer esto programáticamente .

Debido a que parece que solo puede obtener rastros para excepciones en Unix, puede bifurcar y lanzar la excepción en el segundo proceso. De esta manera el proceso principal puede continuar:

export OCAMLRUNPARAM=b
# compile with -g

flush_all(); let r = Unix.fork() in if r == 0 then raise Exit

Si está usando Ocamlbuild en lugar de invocar el compilador directamente, puede usar la etiqueta debug . Del manual :

  

Con OCamlbuild, simplemente puede agregar la etiqueta de depuración a los objetivos de su programa, y ??se ordenará cuándo insertar la marca -g o no.

Por ejemplo, si está creando un archivo foo.ml con el paquete bar , entonces su archivo _tags tendrá una línea:

<foo.ml>: package(bar), debug

Esto insertará los indicadores -g apropiados al construir el código de bytes / archivos nativos. Sin embargo, aún debe configurar la variable de entorno utilizando export OCAMLRUNPARAM = b como se menciona en las otras respuestas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top