【问题标题】:Better way to rethrow errors for debugging javascript in Chrome在 Chrome 中重新抛出错误以调试 javascript 的更好方法
【发布时间】:2014-05-29 18:15:58
【问题描述】:

Chrome 调试工具大部分时间都很棒,但最近我对重新抛出的错误感到恼火。似乎没有任何方法可以查看调用堆栈,除非您将其设置为在捕获异常时暂停,但随后您会遇到来自其他库的大量错误。如果你想很好地显示错误,它会让异常暂停毫无用处。

考虑这个例子 (http://jsfiddle.net/redbmk/83y8L/1/):

HTML:

<button id="push-me"></button>

Javascript:

function beDangerous() {
    var one = 1, rand = parseInt(Math.random() * 2);

    if (rand === one) console.log("You Win");
    else if (rand === zero) console.log("You Lose");
}

function warnUser(error) {
    alert("Hey, something went wrong! Refresh the page");
    throw error;
}

function runCode() {
    try {
        beDangerous();
    } catch (e) {
        warnUser(e);
    }
}

document.getElementById("push-me").addEventListener("click", runCode);

当您遇到错误时,调用堆栈会向您显示warnUser 引发错误并由runCode 调用。没有办法将其追溯到 beDangerous 并查看当时的变量是什么。您可以看到堆栈跟踪,但只能通过查看error.stack,而这并没有给您任何上下文。用debugger 替换throw error 似乎没有帮助(而且这不允许您关闭调试)。

有没有更好的方法来做到这一点?它已经困扰我一段时间了。

顺便说一句,this question 说要抛出 error.stack,但这对我不起作用(据我了解,stack 属性无论如何都是非标准的,所以这对于其它浏览器)。 This question 说这是 Chrome 中的一个已知错误,在第 19 版中被标记为已修复,但我在第 35 版中发生了这种情况。

【问题讨论】:

    标签: javascript google-chrome debugging error-handling


    【解决方案1】:

    这是一个different,也是 Chrome 中已知的错误,不幸的是,它被标记为 wontfix。看起来 Firefox 开发工具也有同样的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 2015-08-06
      • 2021-08-07
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2013-08-29
      • 2021-08-27
      相关资源
      最近更新 更多