【问题标题】:Stack traces from production OCaml code?来自生产 OCaml 代码的堆栈跟踪?
【发布时间】:2015-06-29 20:35:40
【问题描述】:

这解释了如何获取未捕获异常的堆栈跟踪:

Can I make OCaml produce stack traces on uncaught exceptions?

在生产代码中这样做是否可行?更有用的是,记录未处理的异常并继续(例如,如果在 Web 系统中使用其他 Web 请求)是否可行?

【问题讨论】:

  • 什么意思可行?喜欢表演吗?
  • 从我(无知)的角度来看,这不是一个好主意可能有很多原因,所以我不想猜测它们是什么! :-) 但是是的,糟糕的表现是我想到的一件事。
  • 您是否希望每隔几分钟就有超过 1 个未捕获的异常?如果不是,那么我认为性能不是您主要关心的问题。
  • 我并没有考虑日志回溯的开销问题,而是调试构建(可能优化被禁用等)。只是解释一下我感兴趣的事情:正如我所说,我来自完全不了解 OCaml 的位置。

标签: ocaml production-environment traceback debug-information


【解决方案1】:

很难回答你的问题,可能是因为没有足够的细节。

在(未指定的)未捕获异常后恢复的问题在于,不清楚您的进程上下文中有多少仍然是好的。对我来说,让你的进程失败(并退出)并让更高级别的控制进程启动一个新的进程似乎要好得多。

如果您不希望这些故障以任何频率发生(我希望是这种情况),那么这比继续在原始过程中工作要慢一点也没关系。

如果你这样做了,那么堆栈跟踪只会转到失败进程的标准错误。控制进程可以抓取它并将其打包成一个日志。

我已经构建了这样的系统(不是在 OCaml 中)并且它们运行良好。它们对您的效果如何取决于许多因素,因此我只能建议值得考虑。

【讨论】:

  • 啊,没有OCaml的具体经验?这真的是我感兴趣的部分。我也有像这样工作的构建系统,只是在 OCaml 中没有 :-) 我并不清楚 -g 构建——它似乎是获取回溯所必需的——是否适合在生产中使用(但我我对这里的调试构建不感兴趣,而是对记录回溯感兴趣——调试构建的事情只是提示了这个问题)
  • 你应该做一些测量。折腾意见并不是特别有用。
  • 测量什么?我的问题的目的是从 OCaml 社区获得关于这是否是在 OCaml 世界中做的模糊明智的事情的意见,而不是专门针对性能。没有测量会告诉我这一点。
猜你喜欢
  • 2011-12-19
  • 2011-08-07
  • 2014-03-04
  • 2014-07-27
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
相关资源
最近更新 更多