Страница: 1 |
Страница: 1 |
Вопрос: Глобальный отлов ошибок
Добавлено: 11.07.08 21:45
Автор вопроса: HACKER
В каждом батоне итп.. лениво писать try..catch, больше этих try..catch чем самого кода..
Как бы сделать что-то вроде глобального try..catch, чтобы не ловить ошибки везде самому. В этом глобальном хочу сделать логирование. При попадании в такой глобальный try..catch, метод откуда попали в него, должен прерываться..
Как бы такое реализовать?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #1
Добавлено: 12.07.08 05:46
Писать коде сразу с учетом ошибок
А вообще сам давно интересуюсь этим вопросом.
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 12.07.08 05:54
Не слышал о подобном.
Если нужна обработка ошибок - то собственно Try/Catch, что-то глобальное вряд ли получится сделать...
Номер ответа: 3
Автор ответа:
ника
Вопросов: 1
Ответов: 111
Профиль | | #3
Добавлено: 12.07.08 08:11
Для WinForms предусмотрено событие UnhandledException, которое срабатывает при возникновении необработанного исключения. Еще, возможно, придется поэкспериментировать с UnhandledExceptionMode. Этим можно добиться, чтоб приложение аварийно не падало а продолжало работу, но в любом случае (имхо) твой подход к обработке ошибок в корне не верен. Эти средства предназначены для аварийной обработки исключений, а ты идешь на это сознательно.
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 12.07.08 20:38
Ника, +1
Юзай SetUnhandledExceptionFilter
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 12.07.08 21:54
Спасибо, кое-что получилось...
http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
Вопросы:
1) Не очень понятно для чего нужно
using System.Security.Permissions;
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
2) Обработчик ошибку ловит, но при этом всеравно в IDE прога прерывается, и студия её дебажит.. В релизе вылетает окошко, в котором отображается информация всякая, моя ошибка, ещё куча всего и 3 кнопки (Сведения\Продолжить\Выход).
Это всё хорошо, но мне бы чего попроще. Окошко это страшное с кучей подробностей не нужны, не нужна возможность прервать программу итп... Просто бы моё окошко с ошибокой (MessageBox.Show..) и прога дальше без дополнительных вопросов работала... (Ну или завершила процедуру в которой произошло исключение).
Номер ответа: 6
Автор ответа:
ника
Вопросов: 1
Ответов: 111
Профиль | | #6
Добавлено: 12.07.08 23:46
Попробуй такой вариант
using System;
using System.Threading;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// set unhandled exception mode
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
// run application
Application.Run(new Form1());
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
// show exception or write to log
MessageBox.Show(e.Exception.Message,
"Unhandled Exception",
MessageBoxButtons.OK,
MessageBoxIcon.Error); ;
}
}
}
В дебаг все равно вываливается, но в runtime никаких лишних диалогов не выводит.
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 13.07.08 01:01
Большое спасибо!
То что нужно!