haskell中的代码检测

时间:2014-04-21 20:38:13

标签: haskell instrumentation

假设我维护连接到外部系统的复杂应用程序。有一天它开始为某些输入返回意外结果,我需要找出原因。它可能是DNS问题,文件系统相关问题,外部系统变化,任何事情。

假设处理量很大,在我能够确定问题的可能位置之前,我需要获得原始应用程序不会产生的详细跟踪。

如何检测现有代码,以便(例如)可以提供某些组件或功能存在错误的非易失性证明(不是实时调试会话)。

1 个答案:

答案 0 :(得分:1)

这听起来像是一个架构/最佳实践类型问题,而不是Haskell特定的任何问题,除非我误解了某些内容。

听起来您的应用程序需要使用日志记录系统,例如hslogger。一般方法是让代码的每个组件创建具有附加优先级的日志记录消息。然后,您可以让应用程序以不同的方式处理不同的优先级,例如,控制台上可能会显示严重错误,而调试和信息级错误会转到日志文件。

使用Debug.Trace.traceEventDebug.Trace.traceEventIO代替日志系统有时很有用,特别是如果您怀疑并发问题,因为ghc事件日志还会记录有关线程生成/切换的信息,垃圾收集。但总的来说,它并不是实际日志框架的替代品。

此外,您可能希望使用assert作为完整性检查,并且不可能"条件真的不会发生。