3

我正在将 Raygun 错误处理添加到我的 Aurelia 应用程序中,并且刚刚意识到我无法捕获在应用程序设置期间发生的错误(例如,在 内main.configure)。

这是根本不使用 Raygun 而是简单地尝试捕获所有错误的代码:

索引.html

<!DOCTYPE html>
<html>
<head>
    <!-- ... -->
</head>

<body aurelia-app="main">
<script src="build/res/vendor-bundle.js" data-main="aurelia-bootstrapper"></script>
<script type="text/javascript">
    window.onerror = function() {
        console.info('arguments:', arguments);
    }
</script>
</body>
</html>

主要的.ts

// ...
export function configure(aurelia: Aurelia) {
    aurelia.use
        .standardConfiguration()
        .feature('resources');

    // ...

    blah.this = 3; // <-- Force some error...
}

错误记录在控制台onerror中,但未调用我的索引文件中的处理程序。Aurelias internalConsoleAppender.Error也没有被调用,因为我猜它在这个阶段没有配置/激活。

按照开发工具中的堆栈跟踪将我引向此代码...

function tryCatcher() {
    try {
        var target = tryCatchTarget;
        tryCatchTarget = null;
        return target.apply(this, arguments);
    } catch (e) {
        errorObj.e = e;
        return errorObj;
    }
}

...我猜来自Bluebird...

如何可靠地捕获应用程序中的所有错误?


这是记录的错误的屏幕截图:

在此处输入图像描述

  • vendor-bundle.js:3411导致tryCatcher上述
  • app-bundle.js:72:9(堆栈跟踪中的第一个条目)导致实际的错误行blah.this = 3
  • 在这种情况下不会触发蓝鸟unhandledRejectionrejectionHandled 事件......
4

0 回答 0