【问题标题】:unhandled exception handler missing exception info未处理的异常处理程序缺少异常信息
【发布时间】:2021-06-29 11:15:28
【问题描述】:

this 中提出的问题类似,我正在尝试将所有未处理的错误推送到我们的遥测管道,以便为工程师提供足够的信息来调试问题。

未处理的异常处理程序是通过以下方式设置的:

window.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {
        const message: string = `src: ${source} line: ${lineno} col: ${colno}`;
        logError(error || new Error(event.toString()), message);
    };

这似乎与documentation 内联。

在遥测开始流动后,我观察到以下情况:

  1. 对于大多数处理程序调用,error 变量为空。
  2. linenocolno 也是 null0

我知道CROSSORIGIN 设置并且它似乎设置正确。

我找不到任何严格的规则来描述在未处理的回调期间提供的信息。我也在寻找有关我们设置未处理回调的方式的反馈以及潜在改进的想法。

【问题讨论】:

  • 服务器是否也设置了 CORS 标头?这些值是真的 null 还是只是未定义(JSON.stringify 转换为 null)?
  • 您能否展示您的logError 函数的作用或告诉我们您如何确定错误变量为空?我已经用各种奇怪的错误测试了你的处理程序,它应该可以正常工作,除了不处理失败的请求/其他承诺。
  • logError 非常简单。它只是检查错误是否是Error 的实例并提取消息和堆栈并将其推送到遥测端点。
  • Here's a plunk 进行了一些测试。即使在你有throw null 的情况下它仍然有效(因为你有error || new Error(...))。这让我相信问题可能出在这个遥测数据的摄取点。顺便说一句,我最近花了一些时间为我的组织设置 Sentry。它可以设置为在堆栈跟踪中显示打字稿源代码行,而不是缩小的 javascript 代码。
  • 您是否在客户端检查过error 是否为null

标签: javascript typescript exception


【解决方案1】:
<script type="text/javascript">
window.onerror = function(msg, url, line, col, error) {

    const message: string = `src: ${source} line: ${lineno} col: ${colno}`;
    logError(error || new Error(event.toString()), message);

   // Send your telemetry info here

   // Many browsers show alerts dialogs when errors are founded, so return true to suppress it.
   return true;
};
</script>

window.onerror 什么时候触发?

在以下任一情况下引发事件

  1. 有一个未捕获的异常
  2. 发生编译时错误

例如:

未捕获的异常

  • 抛出“一些消息”
  • 调用或引用未定义;
  • cross_origin_iframe.contentWindow.document;,安全异常

编译错误

<script>{</script>
<script>for(;)</script>
<script>"oops</script>
setTimeout("{", 10);, it will attempt to compile the first argument as a script

支持 window.onerror 的浏览器

  • Chrome 13+
  • 火狐6.0+
  • Internet Explorer 5.5+
  • Opera 11.60+
  • Safari 5.1+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2016-03-06
    • 2011-11-19
    相关资源
    最近更新 更多