Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отлов всех исключений 
V
    Опции темы
ДобренькийПапаша
Дата 20.1.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Поясню. Юзверь пользуется моей прогой и рушит её. Т.е. эксэпшн после которого вылет проги. Пусть рушится. Надо предложить пользователю отправить отчёт об ошибке мне на мыло. То есть отчёт сформировать надо ещё. Как реализовать такую штуку? 

По сути это отлов всех исключений как-бы (хотя без адекватной реакции чтобы прога не вылетела).


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
PashaPash
Дата 20.1.2010, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Уже обсуждалось пару раз.
Внизу есть список похожих тем, он же "А здесь смотрели?". 


--------------------
PM MAIL WWW   Вверх
ДобренькийПапаша
Дата 20.1.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Эм... когда ввёл название темы, я посмотрел похожие, но такой не было. Извиняйте.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Sfate
Дата 21.1.2010, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

Репутация: нет
Всего: нет



если тема еще не закрыта...
помоему легче всего реализовать через блоки try и cacth... приблизительно так:
Код

try
{
     //свой код
}
catch(Exception ex)
{
     //тут код отправки на мыло причины: "ex"
}

--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Экскалупатор
Дата 21.1.2010, 22:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



реализуй класс который тебе будет создавать отчеты об ошибках. и каждый раз при вылове ошибки передавай в него код ошибки, класс где она была отловлена и прочую важную/нужную инфу. потом из этого же класса(который создает отчеты) запускай окошко в котором будет предлагаться отправка. если пользователь откажется то что бы отчет сохранялся бы в какой нибудь файл(может когда нибудь согласится, тогда отправиться весь файл).
ну а ловить конечно через try cath.

Это сообщение отредактировал(а) Экскалупатор - 21.1.2010, 22:27
PM MAIL ICQ   Вверх
KelTron
Дата 22.1.2010, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Если нужно отловить вообще все исключения в одном месте:
Код

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.ThreadException += 
        new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    //...
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
    string error = e.Exception.Message;
}




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
ДобренькийПапаша
Дата 22.1.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



KelTron, то есть при выкидывании любого исключения будет срабатывать обработчик Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)?

Если да, то это то, что нужно!)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
KelTron
Дата 22.1.2010, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 9
Всего: 38



Именно так.

А точнее будет перехвачено любое необработанное исключение.

Это сообщение отредактировал(а) KelTron - 22.1.2010, 19:58


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Heinzz
Дата 23.1.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 5
Всего: 9



а как мне кажется это неправильно перехватывать все исключения, это костыли smile 


--------------------
user posted image
PM MAIL   Вверх
ДобренькийПапаша
Дата 23.1.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Heinzz, Я вставлю код, предложенный KelTron, непосредственно перед релизом. Что плохого?


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Экскалупатор
Дата 23.1.2010, 11:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



ДобренькийПапаша, плохо будет в том что ты сам не узнаешь что и где у тебя сработает. и не сможешь сохранить состояние объекта при этом. надо ставить прежде всего в узких местах. что бы прежде всего ошибки перехватывались и обрабатывались на местах, и только потом, если там не справиться, был глобальный отлов. а вообще если все правильно сделано, то должно хватать только конкретных ловушек в узких местах.
PM MAIL ICQ   Вверх
gambit
Дата 23.1.2010, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 5
Всего: 40



я делал вот так

Код

static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                Application.Run(new EnterForm());
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        }


вместо messageBox, можно отправить например в статический класс.
здесь будут пойманы все исключения необработанные ранее

Добавлено через 5 минут и 44 секунды
Цитата(Экскалупатор @  23.1.2010,  11:54 Найти цитируемый пост)
надо ставить прежде всего в узких местах.

это естественно, но не всегда возможно определить где слабое место.
например:
                InsufficientMemoryException;
                TimeoutException;
                StackOverflowException;
                OutOfMemoryException
каждую строку в эти эксепшены не обернешь

Цитата(ДобренькийПапаша @  20.1.2010,  19:38 Найти цитируемый пост)
Надо предложить пользователю отправить отчёт об ошибке мне на мыло.

когда приложение падает по ex, то выдается сообщение об отправке сообщения в microsoft, а там можно настроить что б microsoft пересылал это сообщение тебе(во всяком случае раньше там было).
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 23.1.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



gambit, твой пример ловит исключения только в главном потоке.


--------------------
PM MAIL WWW   Вверх
ДобренькийПапаша
Дата 23.1.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



gambit, да тоже так можно. 
PashaPash, правда, правильно сказал, что только для главного потока)))

Можно и так, у меня однопоточное приложение получилось.

Экскалупатор, про узкие места согласен, но всё-равно всё не отловишь так.

Это сообщение отредактировал(а) ДобренькийПапаша - 23.1.2010, 14:18


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
tol05
Дата 23.1.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(ДобренькийПапаша @  20.1.2010,  18:38 Найти цитируемый пост)
Юзверь пользуется моей прогой и рушит её. Т.е. эксэпшн после которого вылет проги. Пусть рушится. Надо предложить пользователю отправить отчёт об ошибке мне на мыло. То есть отчёт сформировать надо ещё.

я бы использовал AppDomain.UnhandledException

как раз для того, чтобы 
Цитата

Это событие предоставляет уведомление о неперехваченных исключениях. Оно позволяет приложению записать в журнал информацию об исключении до того, как системный обработчик по умолчанию сообщит пользователю об исключении и прекратит выполнение приложения. Если имеется достаточно информации о состоянии приложения, можно выполнить другие действия, такие как сохранение данных программы для последующего восстановления.

работает для любого потока


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1200 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.