Domanda

Il linguaggio Objective Caml produrrà tracce di stack solo se le richiedi nel modo giusto: quali sono i requisiti sia per bytecode che per codice nativo?

È stato utile?

Soluzione

Compilare con -g e impostare la variabile d'ambiente OCAMLRUNPARAM = b

Altri suggerimenti

Alcune funzioni Printexc ti consentono di farlo a livello di codice .

Poiché sembra che puoi ottenere tracce solo per le eccezioni su unix, puoi eseguire il fork e generare l'eccezione nel secondo processo. In questo modo il processo principale può continuare:

export OCAMLRUNPARAM=b
# compile with -g

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

Se stai usando Ocamlbuild invece di invocare direttamente il compilatore, puoi usare il tag debug . Dal manuale :

  

Con OCamlbuild, puoi semplicemente aggiungere il tag di debug ai target del tuo programma e risolverà quando inserire il flag -g oppure no.

Ad esempio, se stai creando un file foo.ml con il pacchetto bar , il tuo file _tags avrà una riga:

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

Questo inserirà i flag -g appropriati durante la creazione di bytecode / file nativi. Tuttavia, è ancora necessario impostare la variabile di ambiente utilizzando export OCAMLRUNPARAM = b come indicato nelle altre risposte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top