|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Мониторинг ошибок в крупном приложении
Добрый день, возникла следующая проблема:
есть код. множество классов, компонентов и тд. но нет обработки ошибок вообще. как лучше оформить обработку ошибок максимально, с полным описанием ошибки в минимальные сроки? одно из решений - регэкспом пройтись по всему коду и воткнуть function func_name():void {try{ null.property = 5; }catch(e:*) {Log.Log("func_name и тд")}} спасибо. --- loaderInfo.uncaughtErrorEvents не подходит т.к. в релизном плеере невозможно получить стактрейс, а нужно знать в какой функции произошла ошибка Последний раз редактировалось nuToH; 26.01.2012 в 14:09. |
|
|||||
Создайте глобальный класс логирования, и сделайте его singleton. И обращайтесь,во Flex есть Logger.
Как-то так
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
спасибо.
а как определять сам факт ошибки? как вы относитесь к повсеместному использованию try catch ? (абс в каждой функции) |
|
|||||
А зачем его использовать в каждой функции( не все функции, кидают исключения )?
Отлавливайте ошибки в тех местах где они могут появиться из-за данных пришедших из вне : битый url, корявое имя пользователя, пропал интернет и т.п. От себя могу добавить, что использую try крайне редко, чаще всего при парсинге XML. На остальное нужно, просто вешать события ошибок.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
просто код уже есть и его много, фиг найдешь места где может быть ошибка, а где нет... =(
|
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
спасибо..
была бы возможность определить откуда ошибка в релизном плеере - было бы то, что нужно! |
|
|||||
Modus ponens
|
Хороших вариантов оссобо нету т.как нужная информация, такая как, например, стек трейс отсутствует в релизном плеере. Но уж если что-то делать регулярными выражениями, так это именно стек трейс. Т.е. не нужно оборачивать каждую функцию в try-catch, это бессмысленно и беспощадно, т.как скорее всего нарушит логику программы, а даже если и нет, заставит ее выполнятся дольше.
Что да можно было бы сделать - первой строкой в каждой функции добавить имя функции на стек (можно даже с аргументами), а на каждом выходе (return, throw) из функции удалить ее со стека. И слушать UncaughtErrorEvent - при получении события - записать информацию которая в текущий момент была на стеке и обнулить стек. Единственная проблема - если есть функции которые ловят ошибки где-то гораздо выше по стеку - тогда прийдется в catch{} блоке искать сколько же именно убрать со стека (не сложно, но и не однострочник) - т.е. найти самое последнее вхождение названия текущей функции в "историю" хранящуюся на стеке. Логгер, вне зависимости от реализации (я не вижу смысла делать его синглоном, например), вещь безусловно полезная. Но идея его использования заключается в том, чтобы писать внятные сообщения о том что произошло в программе - от того, что вы запишете, что случилась ошибка ясности это вам особо не прибавит. Традиционно сообщения в лог пишутся об ошибках которые программист предвидел. Например, не загрузились картинки - нет возможности запустить галерею картинок т.как показывать нечего и т.п.
__________________
Hell is the possibility of sanity |
|
|||||
Debug и ловите на здоровье.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Всем спасибо!
wvxvw, отличная идея!) буду использовать.) Последний раз редактировалось nuToH; 26.01.2012 в 17:54. |
Часовой пояс GMT +4, время: 17:24. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|