【发布时间】: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