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

标签 javascript google-chrome debugging error-handling

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 上却发生了这种情况。

最佳答案

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

关于javascript - 在 Chrome 中重新抛出错误以调试 javascript 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940161/

相关文章:

javascript - 如何在 Node.js 中更改或编辑 Html

css - IE 破坏了我的网站设计

node.js - 是否可以调试 Node 内部模块?

启用扩展序列化调试信息的 Java 标志

google-chrome - Google Chrome - 如何在 Windows 中编译 Google Chrome?

c++ - 格式错误的 C 或 C++ 程序是否保证在 Visual Studio 中的 DEBUG 配置下崩溃

javascript - 使用 Gulp 时 AngularJS 组件配置错误

javascript - 在滚动条上切换事件

javascript - 单击弹出选项时如何获取行的 Id(使用全局变量获取 Id)?

javascript - Chrome 自动填充/自动完成没有密码值