Sto convertendo diversi moduli basati su OCaml su F #. Ho il codice convertito e in esecuzione in F #, tuttavia il risultato della funzione finale in F # non è lo stesso del risultato della funzione finale in OCaml. Quindi, ovviamente, devo seguire le chiamate di funzione per capire quale funzione sta restituendo il risultato sbagliato.Conversione da OCaml a F #: Esiste un modo semplice per simulare la #trace di primo livello di OCaml in F #
OCaml ha una buona direttiva di primo livello per tracciare l'input e l'output di una funzione, ad esempio #trace.
Ho cercato i metodi debug e trace di F # e il più vicino possibile è quello di strumentare il codice utilizzando i metodi Trace.Write ma richiede più righe per ogni metodo.
ad es.
originale
let fun001 parm001 =
parm001 * 10
Instrumented
let fun001 parm001 =
// For VS 2010, this trace output will be sent to Output window.
System.Diagnostics.Trace.WriteLine("function001 <--");
System.Diagnostics.Trace.WriteLine(sprintf "%A" parm001);
let result = parm001 * 10
System.Diagnostics.Trace.WriteLine("function001 -->");
System.Diagnostics.Trace.WriteLine(sprintf "%A" result);
result
fa F # ha la stessa funzionalità OCaml #trace che ho perso durante la ricerca?
Se sei sicuro che la risposta è no, questo è tutto ciò di cui ho bisogno. So che la gente disapprova le risposte brevi, ma questo è tutto ciò di cui ho bisogno se la risposta è no.
EDIT
Per metodi più complessi dove catturare il risultato sarebbe evolvere vasta modifica al codice
originale
let func001 parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
strumentato
let func001org parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
and fun001 parm001 parm002 =
// For VS 2010, this trace output will be sent to Output window.
System.Diagnostics.Trace.WriteLine("function001 <--");
System.Diagnostics.Trace.WriteLine(sprintf "%A, %A" parm001 parm002);
let result = func001org parm001 parm002
System.Diagnostics.Trace.WriteLine("function001 -->");
System.Diagnostics.Trace.WriteLine(sprintf "%A" result);
result
EDIT
012.351.641.061.PostSharp non supporta F #. Vedi: Using PostSharp with F# - Need documentation with working example
Sembra interessante. Ho già corretto il mio bug, x% y avrebbe dovuto essere y% x. Lo terrò a mente la prossima volta che colpirò un bug che impiega più di un'ora per trovarlo. –