gpt4 book ai didi

debugging - 将 OCaml 转换为 F# : Is there a simple way to simulate OCaml top-level #trace in F#

转载 作者:行者123 更新时间:2023-12-02 23:17:29 24 4
gpt4 key购买 nike

我正在将几个基于 OCaml 的模块转换为 F#。我已在 F# 中转换并运行代码,但是 F# 中的最终函数的结果与 OCaml 中的最终函数的结果不同。所以显然我必须跟踪函数调用来找出哪个函数返回错误的结果。

OCaml 有一个很好的顶级指令来跟踪函数的输入和输出,即 #trace .

我搜索了 F# 的 debugtrace方法,我得到的最接近的是使用 Trace.Write 方法来检测代码,但每个方法需要几行。

例如

原创

let fun001 parm001 =
parm001 * 10

已检测

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

F# 是否具有与我在搜索时错过的 OCaml #trace 相同的功能?

如果你确定答案是否定的,这就是我所需要的。我知道人们不喜欢简短的答案,但如果答案是否定的,这就是我所需要的。

编辑

对于更复杂的方法,捕获结果将对代码进行大量修改

原创

let func001 parm001 parm002 =
match parm001 with
| pattern001 -> func002 parm002
| head :: tail ->
func003 head
func001 tail
| [] -> failwith "failed"

已检测

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

编辑

PostSharp 不支持 F#。请参阅:Using PostSharp with F# - Need documentation with working example

最佳答案

F# 中没有内置功能,但我相信您可以使用第三方工具来实现这一点。

一种方法可能是使用 PostSharp 。这是面向方面编程的工具(这是一种将一些附加操作附加到某些方法的风格)。它被实现为一个后处理器,它接受编译后的程序集并向每个方法添加一些操作。我不确定它是否已经用 F# 进行过测试,但我相信它应该可以工作。

使用 PostSharp,您可以实现记录有关方法调用的信息的 aspect(就像 OCaml 中的 #trace 命令),然后使用全局配置将其附加到所有方法。文章Non-Invasive Tracing & Logging他们的网站上正是实现了这一点(并且以更加灵活和强大的方式)。

关于debugging - 将 OCaml 转换为 F# : Is there a simple way to simulate OCaml top-level #trace in F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12324054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com