Я знаю, что я 4 года опоздал на вечеринку здесь , но все же почувствовал желание добавить свои 2 цента.
Как указывает Эльдар, вы можете использовать e.message, чтобы получить сообщение об исключении. Однако в Chrome, Firefox и IE10 + вы также можете получить трассировку стека, используя e.stack. Трассировка стека будет содержать номер файла и строки исключения.
Таким образом, чтобы собрать строку с информацией исключения, можно было бы написать что-то вроде этого:
var exmsg = "";
if (e.message) {
exmsg += e.message;
}
if (e.stack) {
exmsg += ' | stack: ' + e.stack;
}
Заметьте, что вы только получить трассировки стека, если
- исключение было брошено в браузере (например, в ответ на ошибку синтаксиса );
- объект исключения является объектом Error или имеет объект Error в качестве своего прототипа.
Так что просто бросать строку (выбросить «Исключение !!») не даст вам трассировки стека.
Чтобы сделать это немного дальше, чтобы поймать все неперехваченные исключения, вы должны использовать обработчик window.onerror (аналогично обработчику .Net Application_Error в global.asax).Недостатком этого было (и в основном все еще), что это не даст вам доступ к фактическому объекту исключения, поэтому вы не сможете получить трассировку стека. Вы получите только сообщение, URL и номер строки.
Недавно стандарт был расширен, чтобы дать вам колонку (отлично подходит для уменьшенных файлов) и объект исключения, а также: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#errorevent
Сейчас (апрель 2014), только Chrome 32 реализует все это. IE10 + предоставляет вам столбец, но не объект исключения. Firefox 28 все еще дает вам сообщение, URL и номер строки. Надеюсь, это скоро улучшится. Я написал об этом в проекте JSNLog, по адресу: http://jsnlog.com/Documentation/GetStartedLogging/ExceptionLogging
(оговорке: Я автор JSNLog и jsnlog.com)
Во-вторых, объект Exception .Net поддерживает внутренние исключения. Он также имеет свойство Data, поэтому вы можете присоединить пары значений ключа, например, значения переменных. Я вроде пропустил это в объекте JavaScript Error, поэтому создал собственный объект Exception, также как часть проекта JSNLog. Он находится в файле jsnlog.js в проекте jsnlog.js Github (https://github.com/mperdeck/jsnlog.js).
Описание находится по адресу: http://jsnlog.com/Documentation/JSNLogJs/Exception
Наконец бесстыдный плагин - проект JSNLog Я работаю над позволяет вставлять лесорубов в вашем JavaScript, и автоматически вставляет сообщения журнала в существующем журнале на стороне сервера. Таким образом, чтобы войти исключения JavaScript с их трассировки стека в журнале на стороне сервера, вам нужно только написать:
try {
...
} catch (e) {
JL().fatalException("something went wrong!", e);
}
Это не работает с сервером. Кроме того, это не современный UX. –