8

estoy tratando de conseguir un StackTrace con Printexc.get_backtrace, pero estoy recibiendo un error:¿Cuándo se debe usar -g para imprimir trazas de pila en OCaml?

(Program not linked with -g, cannot print stack backtrace)

Estoy compilando así:

ocamlfind ocamlc -g -o foo ... $(FOO_OBJS)

FOO_OBJS son recopilados con solo: ocamlc -c $OBJ

¿Qué pasa? ¿Debería compilarse cada .cmo con -g?

Si se produce una excepción en un objeto compilado sin -g ¿obtendré un stacktrace parcial, o no stacktrace en absoluto?

Respuesta

9

What's wrong? Should every .cmo be compiled with -g?

Sí, debe agregar la opción -g a la compilación y vinculación. También puede usar ocamldebug para recorrer el programa con esta opción activada. También la variable de entorno, OCAMLRUNPARAM debe establecerse en b.

If exception occurs in an object compiled without -g will I get a partial stacktrace, or no stacktrace at all?

¡Usted apuesta! Recuerdo algunas veces que había olvidado la opción -g y que el seguimiento posterior era solo de la biblioteca estándar.

+4

Por cierto, todas las librerías (cma y cmxa) se deben compilar con -g, de lo contrario, el usuario pobre obtiene retrocesos de pila incompletos. –

+0

Tiene suerte de obtener trazas inversas parciales, a veces mezclando módulos con y sin marcas inversa completamente erróneas - vea PR # 5074 – ygrek

+1

Hay una variable de entorno 'OCAMLRUNPARAM = b' que puede establecer, ¿cómo se relaciona esto? – Ptival

Cuestiones relacionadas