¿Cómo puedo obtener un seguimiento de pila en OCaml?


El lenguaje Caml objetivo solo producirá trazas de pila si las solicita correctamente - ¿cuáles son los requisitos tanto para el código de bytes como para el código nativo?

Author: Thelema, 2008-09-28

4 answers

Compilar con-g y establecer la variable de entorno OCAMLRUNPARAM = b

 35
Author: Thelema,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-28 13:56:53

Algunas funciones Printexc le permiten hacer esto mediante programación.

 9
Author: Tobu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-01 15:05:16

Debido a que parece que solo puede obtener trazas de 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
 2
Author: Marc Weber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-23 00:54:04

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

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

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

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

Esto insertará las banderas -g apropiadas mientras se construye bytecode / archivos nativos. Sin embargo, todavía necesita establecer la variable de entorno usando export OCAMLRUNPARAM=b como se mencionó en las otras respuestas.

 0
Author: theindigamer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-30 03:23:25