我正在将 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
- 在这种情况下不会触发蓝鸟
unhandledRejection
和rejectionHandled
事件......