2011-11-10 2 views
8

Cosa si usa per la traccia e il debug in OCaml?Tracciamento e debug in OCaml

Per il debug ho provato ocamldebug e il plug-in Emacs.

Per il tracciamento, desidero essere in grado di stampare il costruttore di dati di ogni variabile. Un esempio utilizzando camlp4 è mostrato qui: http://caml.inria.fr/pub/docs/tutorial-camlp4/tutorial007.html#toc52

type colour = Red | Green | Blue 
    let print_colour = 
    function 
     Red -> print_string "Red" 
    | Green -> print_string "Green" 
    | Blue -> print_string "Blue" 
+0

Non esiste un modo incorporato per stampare i valori di un tipo definito dall'utente, ma ci sono alcuni progetti esterni che risolvono il problema in vari modi. Vedi questa pagina della domanda SO precedente: http://stackoverflow.com/questions/7518752/is-there-a---to-print-user-defined-datatypes-in-ocaml –

+0

Per il tracciamento, il toplevel è il modo più semplice , se puoi fare i tuoi esperimenti in esso (funziona bene per il debug della struttura dati, non così bene per I/O). – Gilles

risposta

9

ocamldebug funziona bene quando è possibile utilizzare bytecode.

Se si desidera eseguire il debug di un'applicazione di codice nativo, c'è un patch by Thomas gazagnaire su Mantis che consente di passare riga per riga nel programma OCaml utilizzando gdb. Parti di questa patch dovrebbero essere integrate nella prossima versione di OCaml (3.13 o 4.00).

Attualmente, tuttavia, non è possibile stampare i valori OCaml, ma è in arrivo un'altra patch, utilizzando GADT per definire una funzione stampante generica per qualsiasi tipo.

+0

Ciao, qual è lo stato del supporto per gdb/lldb, a partire dal 2015? – Antoine

+0

Che cos'è un file bytecode? Ho provato tutto e 'ocamldebug' dice" non un file bytecode ". –