更好的方法来重新抛出错误调试javascript在Chrome

Better way to rethrow errors for debugging javascript in Chrome

本文关键字:调试 javascript Chrome 错误 新抛出 方法 更好      更新时间:2023-09-26

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似乎没有帮助(并且不允许您关闭调试)。

有更好的方法吗?这件事已经困扰我有一段时间了。

顺便说一下,这个问题说要抛出error.stack,但这对我不起作用(正如我所理解的,stack属性是非标准的,所以这对其他浏览器来说是不正确的)。这个问题说这是Chrome浏览器中一个已知的错误,在版本19中被标记为已修复,但我在版本35中发生了这种情况。

这是一个不同的,但也是已知的错误在Chrome,不幸的是,它被标记为非修复。看起来火狐开发工具也有同样的问题