|
Modus ponens
модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
|
Хороших вариантов оссобо нету т.как нужная информация, такая как, например, стек трейс отсутствует в релизном плеере. Но уж если что-то делать регулярными выражениями, так это именно стек трейс. Т.е. не нужно оборачивать каждую функцию в try-catch, это бессмысленно и беспощадно, т.как скорее всего нарушит логику программы, а даже если и нет, заставит ее выполнятся дольше.
Что да можно было бы сделать - первой строкой в каждой функции добавить имя функции на стек (можно даже с аргументами), а на каждом выходе (return, throw) из функции удалить ее со стека. И слушать UncaughtErrorEvent - при получении события - записать информацию которая в текущий момент была на стеке и обнулить стек. Единственная проблема - если есть функции которые ловят ошибки где-то гораздо выше по стеку - тогда прийдется в catch{} блоке искать сколько же именно убрать со стека (не сложно, но и не однострочник) - т.е. найти самое последнее вхождение названия текущей функции в "историю" хранящуюся на стеке.
Логгер, вне зависимости от реализации (я не вижу смысла делать его синглоном, например), вещь безусловно полезная. Но идея его использования заключается в том, чтобы писать внятные сообщения о том что произошло в программе - от того, что вы запишете, что случилась ошибка ясности это вам особо не прибавит. Традиционно сообщения в лог пишутся об ошибках которые программист предвидел. Например, не загрузились картинки - нет возможности запустить галерею картинок т.как показывать нечего и т.п.
__________________
Hell is the possibility of sanity
|