2015-04-06 62 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

相關問題