如何跟踪OCaml中的调试程序?

Sof*_*mur 9 debugging ocaml coding-style

我有一个关于编码实践的一般问题......

在调试时,在我的代码的某些时候,我需要一些代码来打印当前状态; 当我不调试时,我不想将代码保留在那里,因为它阻碍了其他代码的可见性......

很难将它们打包成一个函数,因为大多数时候,它涉及局部变量,我不想将所有内容作为参数传递...

那么你如何管理这种"打印/检查"代码呢?有什么好的做法吗?

Fab*_*ant 6

我曾经有一个调试函数,只有在设置了一个标志时才打印最终的字符串.现在,我更喜欢添加if语句:

  • 他们不会再长久了
  • 没有计算是条件是假的
  • 读取代码时很容易看到它只是用于调试

我也曾经有过camlp4宏,它会if从函数应用程序生成语句,但它只适用于使用camlp4的项目,我现在倾向于避免使用它.

请注意,通常,我不使用一个调试标志,而是使用许多调试标志,每个模块一个,然后是meta标签,它们将触发几个模块或正交方面的调试.它们作为标志列表放在哈希表中,我可以使用参数或环境变量来设置它们.


cag*_*ago 5

我经常使用一个调试函数,它只在调试标志设置为true时打印值:

let debug_flag = ref false

let debug fmt = 
  if !debug_flag then Printf.eprintf fmt 
  else Printf.ifprintf stderr fmt
Run Code Online (Sandbox Code Playgroud)