2015-04-06 37 views
1

我有一个复杂的JavaScript应用程序,当发生某些意外错误时,我想记录它们进行调试,但仍然继续。如何将错误记录为未被捕获?

如何将它们登录到控制台,以便它们的堆栈可以以正常方式访问未捕获的错误?

Chrome控制台中的未被捕获的错误通常只显示错误消息,并且有一个显示三角形,可以单击以显示堆栈跟踪。这个(以及Chrome现在或未来可能为未捕获的错误添加的其他调试功能)是我想要的。

如果我做了明显的catch (e) { console.log(e); }console.error(e),错误对象,而不是显示在对象的检查方式 - 有一个三角形,但点击它显示的错误对象(的性质,所以我必须点击四次以非常格式化的方式获取堆栈属性)。我可以登录e.stack,但仍然缺少一些标准功能。

setTimeout(function() { throw e; }, 0);是另一种选择,但会混淆调试,因为它会更改控制台中消息的顺序。 (把整个代码可能抛出setTimeout 可能是可行的,但我想调查只是修复日志记录第一。)

+0

我不认为你想要什么是可能的,但如果你可以,看看AngularJS的来源,他们基本上是你想要的。被警告说*它使任何其他浏览器中的调试几乎不可能!* – Kroltan 2015-04-06 00:24:17

回答

0

console.log(prettyformatstack(e));而不是!

其中prettyformatstack(e)发生错误会返回您正在查找的字符串。

+0

你隐含地提出我做'console.log(e.stack)'。当然,这确实得到了堆栈,但它没有得到格式化的其余部分。通过使用'console.groupCollapsed'我可以更近一些,但它仍然不是**标准的未捕获错误格式化** - 并且它将不会在未来版本的Chrome中引入任何调试便利。 – 2015-04-06 00:21:55

+0

然后只是写一个函数,它可以像你想要的那样格式化它,这很简单 – 2015-04-06 00:22:37

+1

**我不想复制浏览器的功能,我想调用它们!**但是只是明确记录堆栈是件好事备份计划,如果我想要的是不可能的。感谢您指出了可能性。 – 2015-04-06 00:24:21

相关问题