无法捕获node-opencv错误?

时间:2013-09-05 21:50:46

标签: node.js exception opencv try-catch

我正在尝试捕获node-opencv(本机绑定)抛出的错误,而不是崩溃进程。

https://github.com/peterbraden/node-opencv

我尝试使用try{}catch(){}块并且使用process.on('uncaughtException', function (exception) {});都没有任何效果,但在抛出错误时进程仍然崩溃。

示例:libc++abi.dylib: terminate called throwing an exception

这个问题指的是任何被抛出的opencv错误,而不是特别错误。

我可以将所有node-opencv放入他们自己的进程中 - 然后将其作为主进程的子进程运行。当它崩溃,重新启动它并继续前进?

1 个答案:

答案 0 :(得分:-1)

您可以使用domain

  

域提供了一种处理多个不同IO操作的方法   单组。如果注册了任何事件发射器或回调   域发出错误事件,或抛出错误,然后域   将通知对象,而不是丢失错误的上下文   在process.on(' uncaughtException')处理程序中,或导致程序   立即退出并显示错误代码。

好的,你不喜欢我以前的答案,所以这是另一个答案:

http://snmaynard.com/2012/12/21/node-error-handling/

http://benno.id.au/blog/2011/08/08/nodejs-exceptions

  

另一种选择是使用node.js提供的事件系统。那   这是我们接下来要看的内容,因为它是node.js在内部使用的内容。我们   将改变我们的代码,以便y发出一个myerror事件   而不是异常冒泡。

var events = require('events')
emitter = new events.EventEmitter()

function y(arg, callback) {
    if (arg === 1) {
    x()
    callback()
    } else {
    function onTick() {
        try {
        x()
        } catch(err) {
        emitter.emit('myerror', err)
        return
        }
        callback()
    }
    process.nextTick(onTick)
    }
}

节点代码非常特殊地处理被称为错误的事件。来自event.js中的emit代码:

  if (type === 'error') {
    if (!this._events || !this._events.error ||
        (isArray(this._events.error) && !this._events.error.length))
    {
      if (arguments[1] instanceof Error) {
        throw arguments[1]; // Unhandled 'error' event
      } else {
        throw new Error("Uncaught, unspecified 'error' event.");
      }
      return false;
    }
  }