你能问ruby把警告视为错误吗?

ruby是否允许您将警告视为错误?

我想这样做的一个原因是确保如果heckle删除一行代码意味着发出警告,我可以选择确保突变体被杀死。

很遗憾没有真正做到这一点的方法,至少在大多数版本的Ruby上没有( 可能存在变化), 缺少监视程序输出并在标准错误上出现警告时中止。 原因如下:

  • Ruby定义了Kernel.warn ,你可以重新定义你想做的任何事情(包括退出),并且你期望 (希望)Ruby一致地使用它来报告警告(包括内部例如解析警告), 但是
  • Ruby内部本地实现的方法 (在C中)将直接从source/server.c直接调用一个名为rb_warn的本机方法,完全绕过你对Kernel.warn的重新定义 (例如,“ string literal in condition ”警告,例如,当发出时执行类似: do_something if 'string' rb_warn do_something if 'string' ,通过source/parse.c的本机rb_warn打印)
  • 更糟糕的是,还有一个额外的rb_warning本机方法,如果指定了-w-v ,Ruby可以使用它来记录警告。

因此,如果您需要仅对应用程序代码调用Kernel.warn生成的警告采取措施,则只需重新定义Kernel.warn 否则,您有两个选择

  1. alter source/error.crb_warnrb_warning (和rb_warn_m ?)中退出,并重建Ruby
  2. 监视程序的标准错误输出’ : warning: ‘,并在匹配时中止它

您也可能使用DTrace,并拦截对rb_warnrb_warning的调用,尽管这不会产生可以从某个地方拯救的exception。 相反,它只是把它们放在一个你可以轻松记录它们的地方。