haskell中的代码检测

Rum*_*mca 7 instrumentation haskell

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

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

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

Joh*_*n L 1

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

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

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

此外,您可能希望利用assert健全性检查来确保“不可能”的情况确实不会发生。