Guy*_*der 5 debugging f# trace ocaml
我正在将基于OCaml的几个模块转换为F#.我将代码转换并在F#中运行,但是F#中的最终函数的结果与OCaml中的最终函数的结果不同.所以显然我必须按照函数调用来确定哪个函数返回错误的结果.
OCaml有一个很好的顶级指令,用于跟踪函数的输入和输出,即#trace.
我已经搜索了F#的调试和跟踪方法,最接近的是使用Trace.Write方法检测代码,但每个方法需要几行.
例如
原版的
let fun001 parm001 =
parm001 * 10
Run Code Online (Sandbox Code Playgroud)
仪表
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
Run Code Online (Sandbox Code Playgroud)
F#是否具有与我在搜索时遗漏的OCaml #trace相同的功能?
如果你确定答案是肯定的,那就是我所需要的.我知道人们对简短的答案皱眉,但如果答案是否定的,那就是我所需要的.
编辑
对于更复杂的方法,捕获结果会对代码进行大量修改
原版的
let func001 parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"
Run Code Online (Sandbox Code Playgroud)
仪表
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
Run Code Online (Sandbox Code Playgroud)
编辑
PostSharp不支持F#.请参阅:将PostSharp与F#一起使用 - 需要使用工作示例的文档